From f7ac06d7d413a288f323dcd7a4e09e3322e58901 Mon Sep 17 00:00:00 2001 From: thisgun Date: Fri, 30 Mar 2018 17:40:37 +0900 Subject: [PATCH] =?UTF-8?q?5.3=20=EB=B2=84=EC=A0=84=20=EB=82=B4=EC=9A=A9?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/admin.head.php | 177 +- adm/admin.lib.php | 7 +- adm/admin.menu100.php | 9 +- adm/admin.tail.php | 34 +- adm/auth_list.php | 8 +- adm/board_copy.php | 64 +- adm/board_form.php | 55 +- adm/board_form_update.php | 3 + adm/board_list.php | 51 +- adm/boardgroup_form.php | 6 +- adm/boardgroup_list.php | 38 +- adm/boardgroupmember_form.php | 11 +- adm/cache_file_delete.php | 2 +- adm/captcha_file_delete.php | 2 +- adm/config_form.php | 256 +- adm/config_form_update.php | 18 + adm/contentform.php | 6 +- adm/contentlist.php | 16 +- adm/css/admin.css | 819 +++-- adm/css/theme.css | 8 +- adm/dbupgrade.php | 88 + adm/faqform.php | 6 +- adm/faqlist.php | 19 +- adm/faqmasterform.php | 6 +- adm/faqmasterlist.php | 16 +- adm/img/close.png | Bin 0 -> 1086 bytes adm/img/home_icon.png | Bin 0 -> 1191 bytes adm/img/logo.jpg | Bin 6018 -> 0 bytes adm/img/logo.png | Bin 0 -> 2015 bytes adm/img/menu-1-1.png | Bin 0 -> 1363 bytes adm/img/menu-1.png | Bin 0 -> 1363 bytes adm/img/menu-2-1.png | Bin 0 -> 1252 bytes adm/img/menu-2.png | Bin 0 -> 1245 bytes adm/img/menu-3-1.png | Bin 0 -> 1028 bytes adm/img/menu-3.png | Bin 0 -> 1028 bytes adm/img/menu-4-1.png | Bin 0 -> 1075 bytes adm/img/menu-4.png | Bin 0 -> 1078 bytes adm/img/menu-6-1.png | Bin 0 -> 1062 bytes adm/img/menu-6.png | Bin 0 -> 1038 bytes adm/img/menu-7-1.png | Bin 0 -> 3005 bytes adm/img/menu-7.png | Bin 0 -> 2978 bytes adm/img/menu-cl.png | Bin 0 -> 1044 bytes adm/img/menu-op.png | Bin 0 -> 957 bytes adm/img/menu_default.png | Bin 0 -> 1138 bytes adm/img/menu_default_on.png | Bin 0 -> 1225 bytes adm/img/menulist_sub.png | Bin 0 -> 2884 bytes adm/img/op_btn.png | Bin 0 -> 1012 bytes adm/img/op_btn1.gif | Bin 0 -> 1101 bytes adm/img/page_1.png | Bin 0 -> 1038 bytes adm/img/page_2.png | Bin 0 -> 1032 bytes adm/img/page_3.png | Bin 0 -> 962 bytes adm/img/page_4.png | Bin 0 -> 972 bytes adm/img/sch_btn.png | Bin 0 -> 1384 bytes adm/img/service_img1.jpg | Bin 6634 -> 24939 bytes adm/img/service_img2.jpg | Bin 7259 -> 8238 bytes adm/img/service_img3.jpg | Bin 0 -> 8884 bytes adm/img/shop_icon.png | Bin 0 -> 1124 bytes adm/img/social/sns_logo.png | Bin 0 -> 6045 bytes adm/img/social/sns_logo_not.png | Bin 0 -> 5465 bytes adm/img/svc_btn_02.jpg | Bin 3109 -> 3089 bytes adm/img/svc_btn_03.jpg | Bin 2703 -> 2898 bytes adm/img/svc_btn_04.jpg | Bin 3221 -> 3260 bytes adm/img/svc_btn_05.jpg | Bin 4763 -> 4932 bytes adm/img/svc_btn_06.jpg | Bin 0 -> 3049 bytes adm/img/tit_op_btn.gif | Bin 0 -> 75 bytes adm/img/wrest.gif | Bin 0 -> 51 bytes adm/index.php | 1 + adm/mail_form.php | 6 +- adm/mail_list.php | 17 +- adm/member_form.php | 131 +- adm/member_form_update.php | 85 +- adm/member_list.php | 124 +- adm/menu_form.php | 6 +- adm/menu_form_search.php | 8 +- adm/menu_list.php | 19 +- adm/newwinform.php | 6 +- adm/newwinlist.php | 14 +- adm/point_list.php | 22 +- adm/poll_form.php | 6 +- adm/poll_list.php | 16 +- adm/popular_list.php | 8 +- adm/popular_rank.php | 8 +- adm/qa_config.php | 4 +- adm/session_file_delete.php | 2 +- adm/sms_admin/ajax.sms_write_level.php | 2 +- adm/sms_admin/ajax.sms_write_person.php | 6 +- adm/sms_admin/config.php | 6 +- adm/sms_admin/css/sms5.css | 35 +- adm/sms_admin/form_group.php | 24 +- adm/sms_admin/form_list.php | 14 +- adm/sms_admin/history_list.php | 8 +- adm/sms_admin/history_num.php | 8 +- adm/sms_admin/history_view.php | 26 +- adm/sms_admin/member_update.php | 4 +- adm/sms_admin/num_book.php | 38 +- adm/sms_admin/num_book_file.php | 6 +- adm/sms_admin/num_book_move.php | 68 +- adm/sms_admin/num_book_write.php | 6 +- adm/sms_admin/num_group.php | 23 +- adm/sms_admin/sms_write.php | 14 +- adm/theme.php | 4 +- adm/theme_detail.php | 11 +- adm/thumbnail_file_delete.php | 4 + adm/visit.sub.php | 2 +- adm/visit_browser.php | 2 +- adm/visit_date.php | 2 +- adm/visit_delete.php | 4 +- adm/visit_device.php | 2 +- adm/visit_domain.php | 2 +- adm/visit_hour.php | 2 +- adm/visit_month.php | 2 +- adm/visit_os.php | 2 +- adm/visit_search.php | 2 +- adm/visit_week.php | 2 +- adm/visit_year.php | 2 +- adm/write_count.php | 5 +- bbs/board.php | 6 +- bbs/content.php | 2 +- bbs/group.php | 9 +- bbs/login.php | 4 + bbs/login_check.php | 37 +- bbs/logout.php | 4 + bbs/member_confirm.php | 5 + bbs/member_leave.php | 5 + bbs/move.php | 3 +- bbs/qalist.php | 2 + bbs/register_form.php | 11 + bbs/register_form_update.php | 91 +- bbs/register_result.php | 2 +- bbs/view.php | 10 +- bbs/write.php | 4 +- bbs/write_update.php | 4 +- common.php | 4 + config.php | 5 +- css/default.css | 741 +++-- css/mobile.css | 603 ++-- extend/default.config.php | 9 + extend/social_login.extend.php | 45 + extend/version.extend.php | 4 +- g4_import.php | 177 +- g4_import_run.php | 837 +++--- head.php | 266 +- head.sub.php | 4 +- img/btn_end.gif | Bin 0 -> 1176 bytes img/btn_first.gif | Bin 0 -> 1885 bytes img/btn_next.gif | Bin 0 -> 1169 bytes img/btn_prev.gif | Bin 0 -> 1873 bytes img/btn_top.gif | Bin 0 -> 1178 bytes img/captcha2.png | Bin 0 -> 4886 bytes img/close_btn.gif | Bin 0 -> 1209 bytes img/close_btn.png | Bin 0 -> 1147 bytes img/ft_logo.png | Bin 0 -> 3737 bytes img/gnb_bg.gif | Bin 0 -> 1169 bytes img/gnb_bg2.gif | Bin 0 -> 49 bytes img/logo.jpg | Bin 3441 -> 0 bytes img/logo.png | Bin 0 -> 3797 bytes img/m_logo.png | Bin 0 -> 3100 bytes img/mobile/btn_close.png | Bin 0 -> 3265 bytes img/mobile/gnb_bg.png | Bin 0 -> 1012 bytes img/mobile/gnb_bg2.png | Bin 0 -> 976 bytes img/mobile/gnb_sch.png | Bin 0 -> 1795 bytes img/mobile/icon_menu.png | Bin 0 -> 1090 bytes img/mobile/icon_my.png | Bin 0 -> 1634 bytes img/no_img.png | Bin 0 -> 991 bytes img/no_profile.gif | Bin 0 -> 1953 bytes img/require.png | Bin 0 -> 2922 bytes img/sch_btn.png | Bin 0 -> 1234 bytes img/ts01.png | Bin 0 -> 1219 bytes img/ts02.png | Bin 0 -> 1252 bytes img/ts03.png | Bin 0 -> 1319 bytes index.php | 55 +- install/gnuboard5.sql | 41 + install/install_db.php | 98 + js/common.js | 6 +- js/font-awesome/HELP-US-OUT.txt | 7 + js/font-awesome/css/font-awesome.css | 2337 ++++++++++++++ js/font-awesome/css/font-awesome.min.css | 4 + js/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes js/font-awesome/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes js/font-awesome/fonts/fontawesome-webfont.svg | 2671 +++++++++++++++++ js/font-awesome/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes js/font-awesome/less/animated.less | 34 + js/font-awesome/less/bordered-pulled.less | 25 + js/font-awesome/less/core.less | 12 + js/font-awesome/less/fixed-width.less | 6 + js/font-awesome/less/font-awesome.less | 18 + js/font-awesome/less/icons.less | 789 +++++ js/font-awesome/less/larger.less | 13 + js/font-awesome/less/list.less | 19 + js/font-awesome/less/mixins.less | 60 + js/font-awesome/less/path.less | 15 + js/font-awesome/less/rotated-flipped.less | 20 + js/font-awesome/less/screen-reader.less | 5 + js/font-awesome/less/stacked.less | 20 + js/font-awesome/less/variables.less | 800 +++++ js/font-awesome/scss/_animated.scss | 34 + js/font-awesome/scss/_bordered-pulled.scss | 25 + js/font-awesome/scss/_core.scss | 12 + js/font-awesome/scss/_fixed-width.scss | 6 + js/font-awesome/scss/_icons.scss | 789 +++++ js/font-awesome/scss/_larger.scss | 13 + js/font-awesome/scss/_list.scss | 19 + js/font-awesome/scss/_mixins.scss | 60 + js/font-awesome/scss/_path.scss | 15 + js/font-awesome/scss/_rotated-flipped.scss | 20 + js/font-awesome/scss/_screen-reader.scss | 5 + js/font-awesome/scss/_stacked.scss | 20 + js/font-awesome/scss/_variables.scss | 800 +++++ js/font-awesome/scss/font-awesome.scss | 18 + js/jquery.anchorScroll.js | 65 + js/jquery.bxslider.js | 1374 +++++++++ js/placeholders.min.js | 25 + js/remodal/remodal-default-theme.css | 242 ++ js/remodal/remodal.css | 80 + js/remodal/remodal.js | 776 +++++ lib/common.lib.php | 114 +- lib/latest.lib.php | 34 +- lib/thumbnail.lib.php | 87 +- mobile/head.php | 172 +- mobile/index.php | 2 +- mobile/skin/board/basic/img/btn_next2.gif | Bin 0 -> 55 bytes mobile/skin/board/basic/img/btn_prev2.gif | Bin 0 -> 56 bytes mobile/skin/board/basic/img/cmt_btn.png | Bin 0 -> 2862 bytes mobile/skin/board/basic/img/icon_bad.png | Bin 0 -> 1287 bytes mobile/skin/board/basic/img/icon_comment.png | Bin 0 -> 1604 bytes mobile/skin/board/basic/img/icon_file.gif | Bin 107 -> 197 bytes mobile/skin/board/basic/img/icon_good.png | Bin 0 -> 1288 bytes mobile/skin/board/basic/img/icon_hot.gif | Bin 97 -> 319 bytes mobile/skin/board/basic/img/icon_link.gif | Bin 104 -> 319 bytes mobile/skin/board/basic/img/icon_lock.png | Bin 0 -> 1225 bytes mobile/skin/board/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes mobile/skin/board/basic/img/icon_secret.gif | Bin 97 -> 318 bytes mobile/skin/board/basic/img/icon_view.png | Bin 0 -> 1936 bytes mobile/skin/board/basic/img/require.png | Bin 0 -> 2922 bytes mobile/skin/board/basic/img/sch_btn.png | Bin 0 -> 1234 bytes mobile/skin/board/basic/list.skin.php | 154 +- mobile/skin/board/basic/style.css | 264 +- mobile/skin/board/basic/view.skin.php | 222 +- mobile/skin/board/basic/view_comment.skin.php | 179 +- mobile/skin/board/basic/write.skin.php | 162 +- mobile/skin/board/gallery/list.skin.php | 146 +- mobile/skin/board/gallery/style.css | 221 +- mobile/skin/board/gallery/view.skin.php | 226 +- .../skin/board/gallery/view_comment.skin.php | 179 +- mobile/skin/board/gallery/write.skin.php | 161 +- .../connect/basic/current_connect.skin.php | 30 +- mobile/skin/connect/basic/style.css | 18 +- mobile/skin/faq/basic/list.skin.php | 22 +- mobile/skin/faq/basic/style.css | 37 +- mobile/skin/latest/basic/img/icon_comment.png | Bin 0 -> 1604 bytes mobile/skin/latest/basic/img/icon_file.gif | Bin 107 -> 197 bytes mobile/skin/latest/basic/img/icon_hot.gif | Bin 97 -> 319 bytes mobile/skin/latest/basic/img/icon_img.gif | Bin 145 -> 317 bytes mobile/skin/latest/basic/img/icon_link.gif | Bin 104 -> 319 bytes mobile/skin/latest/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes mobile/skin/latest/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes mobile/skin/latest/basic/img/icon_secret.gif | Bin 97 -> 318 bytes mobile/skin/latest/basic/latest.skin.php | 27 +- mobile/skin/latest/basic/style.css | 21 +- mobile/skin/member/basic/formmail.skin.php | 97 +- mobile/skin/member/basic/img/btn_del.gif | Bin 0 -> 1187 bytes mobile/skin/member/basic/img/icon_file.gif | Bin 0 -> 197 bytes mobile/skin/member/basic/login.skin.php | 23 +- .../skin/member/basic/member_confirm.skin.php | 4 - mobile/skin/member/basic/memo.skin.php | 54 +- mobile/skin/member/basic/memo_form.skin.php | 54 +- mobile/skin/member/basic/memo_view.skin.php | 63 +- mobile/skin/member/basic/password.skin.php | 3 - .../skin/member/basic/password_lost.skin.php | 31 +- mobile/skin/member/basic/point.skin.php | 125 +- mobile/skin/member/basic/profile.skin.php | 6 +- mobile/skin/member/basic/register.skin.php | 43 +- .../skin/member/basic/register_form.skin.php | 386 +-- .../member/basic/register_result.skin.php | 59 +- mobile/skin/member/basic/scrap.skin.php | 8 +- mobile/skin/member/basic/scrap_popin.skin.php | 43 +- mobile/skin/member/basic/style.css | 197 +- mobile/skin/new/basic/new.skin.php | 32 +- mobile/skin/new/basic/style.css | 14 +- mobile/skin/outlogin/basic/img/icon_edit.png | Bin 0 -> 1605 bytes mobile/skin/outlogin/basic/img/icon_memo.png | Bin 0 -> 1852 bytes mobile/skin/outlogin/basic/img/icon_point.png | Bin 0 -> 1923 bytes mobile/skin/outlogin/basic/img/icon_scrap.png | Bin 0 -> 1717 bytes .../skin/outlogin/basic/outlogin.skin.1.php | 15 +- .../skin/outlogin/basic/outlogin.skin.2.php | 27 +- mobile/skin/outlogin/basic/style.css | 44 +- mobile/skin/poll/basic/poll.skin.php | 6 +- mobile/skin/poll/basic/poll_result.skin.php | 161 +- mobile/skin/poll/basic/style.css | 97 +- mobile/skin/popular/basic/popular.skin.php | 22 +- mobile/skin/popular/basic/style.css | 15 +- mobile/skin/qa/basic/list.skin.php | 39 +- mobile/skin/qa/basic/style.css | 97 +- mobile/skin/qa/basic/view.answer.skin.php | 13 +- mobile/skin/qa/basic/view.answerform.skin.php | 36 +- mobile/skin/qa/basic/view.skin.php | 227 +- mobile/skin/qa/basic/write.skin.php | 124 +- mobile/skin/search/basic/search.skin.php | 35 +- mobile/skin/search/basic/style.css | 52 +- mobile/skin/social/img/btn_p.jpg | Bin 0 -> 22909 bytes mobile/skin/social/img/login_id.jpg | Bin 0 -> 466 bytes mobile/skin/social/img/login_pw.jpg | Bin 0 -> 480 bytes mobile/skin/social/img/plus_minus.png | Bin 0 -> 2863 bytes mobile/skin/social/img/sns_fb_s.png | Bin 0 -> 1580 bytes mobile/skin/social/img/sns_gp_s.png | Bin 0 -> 1562 bytes mobile/skin/social/img/sns_kakao_s.png | Bin 0 -> 2104 bytes mobile/skin/social/img/sns_logo.png | Bin 0 -> 6045 bytes mobile/skin/social/img/sns_logo_not.png | Bin 0 -> 5465 bytes mobile/skin/social/img/sns_naver_s.png | Bin 0 -> 1571 bytes mobile/skin/social/img/sns_payco_s.png | Bin 0 -> 1336 bytes mobile/skin/social/img/sns_twitter_s.png | Bin 0 -> 1736 bytes mobile/skin/social/index.php | 0 mobile/skin/social/social_login.skin.php | 85 + mobile/skin/social/social_outlogin.skin.1.php | 85 + mobile/skin/social/social_register.skin.php | 87 + .../social/social_register_member.skin.php | 201 ++ .../social/social_u_register_form.skin.php | 167 ++ mobile/skin/social/style.css | 155 + mobile/skin/visit/basic/style.css | 20 +- mobile/skin/visit/basic/visit.skin.php | 26 +- mobile/tail.php | 57 +- .../editor/smarteditor2/css/smart_editor2.css | 1 + plugin/jquery-ui/datepicker.php | 4 +- plugin/kcaptcha/kcaptcha.lib.php | 2 +- plugin/recaptcha/_common.php | 3 + plugin/recaptcha/captcha.lib.php | 4 + plugin/recaptcha/recaptcha.class.php | 147 + plugin/recaptcha/recaptcha.js | 9 + plugin/recaptcha/recaptcha.user.lib.php | 51 + plugin/recaptcha_inv/_common.php | 3 + plugin/recaptcha_inv/captcha.lib.php | 4 + plugin/recaptcha_inv/recaptcha.class.php | 147 + plugin/recaptcha_inv/recaptcha.js | 20 + plugin/recaptcha_inv/recaptcha.user.lib.php | 52 + plugin/sns/icon/facebook.png | Bin 1052 -> 3123 bytes plugin/sns/icon/gplus.png | Bin 1669 -> 3400 bytes plugin/sns/icon/kakaotalk.png | Bin 1532 -> 4179 bytes plugin/sns/icon/twitter.png | Bin 1030 -> 3393 bytes plugin/sns/view.sns.skin.php | 11 +- plugin/sns/view_comment_write.sns.skin.php | 13 +- plugin/social/Hybrid/Auth.php | 414 +++ plugin/social/Hybrid/Endpoint.php | 222 ++ plugin/social/Hybrid/Error.php | 88 + plugin/social/Hybrid/Exception.php | 17 + plugin/social/Hybrid/Logger.php | 102 + plugin/social/Hybrid/Provider_Adapter.php | 340 +++ plugin/social/Hybrid/Provider_Model.php | 247 ++ .../social/Hybrid/Provider_Model_OAuth1.php | 174 ++ .../social/Hybrid/Provider_Model_OAuth2.php | 184 ++ .../social/Hybrid/Provider_Model_OpenID.php | 170 ++ plugin/social/Hybrid/Providers/Facebook.php | 335 +++ plugin/social/Hybrid/Providers/Google.php | 308 ++ plugin/social/Hybrid/Providers/Kakao.php | 177 ++ plugin/social/Hybrid/Providers/Naver.php | 234 ++ plugin/social/Hybrid/Providers/Payco.php | 212 ++ plugin/social/Hybrid/Providers/Twitter.php | 266 ++ plugin/social/Hybrid/Storage.php | 141 + plugin/social/Hybrid/StorageInterface.php | 29 + plugin/social/Hybrid/User.php | 40 + plugin/social/Hybrid/User_Activity.php | 55 + plugin/social/Hybrid/User_Contact.php | 60 + plugin/social/Hybrid/User_Profile.php | 163 + plugin/social/Hybrid/index.html | 10 + plugin/social/Hybrid/resources/index.html | 10 + .../Hybrid/resources/openid_policy.html | 10 + .../social/Hybrid/resources/openid_realm.html | 13 + .../social/Hybrid/resources/openid_xrds.xml | 12 + .../social/Hybrid/thirdparty/OAuth/OAuth.php | 901 ++++++ .../Hybrid/thirdparty/OAuth/OAuth1Client.php | 264 ++ .../Hybrid/thirdparty/OAuth/OAuth2Client.php | 302 ++ .../Hybrid/thirdparty/OpenID/LightOpenID.php | 1051 +++++++ plugin/social/Hybrid/thirdparty/index.html | 10 + plugin/social/_common.php | 3 + plugin/social/config.php | 63 + plugin/social/error.php | 68 + plugin/social/img/loading_icon.gif | Bin 0 -> 9197 bytes plugin/social/includes/functions.php | 1039 +++++++ plugin/social/includes/g5_endpoint.php | 32 + plugin/social/includes/g5_endpoint_class.php | 32 + plugin/social/includes/index.php | 0 plugin/social/includes/loading.php | 68 + plugin/social/includes/providers.php | 244 ++ plugin/social/index.php | 22 + plugin/social/popup.php | 44 + plugin/social/register_member.php | 52 + plugin/social/register_member_update.php | 191 ++ plugin/social/unlink.php | 48 + skin/board/basic/img/btn_next2.gif | Bin 0 -> 1898 bytes skin/board/basic/img/btn_prev2.gif | Bin 0 -> 1185 bytes skin/board/basic/img/close_btn.png | Bin 0 -> 1147 bytes skin/board/basic/img/cmt_btn.png | Bin 0 -> 2862 bytes skin/board/basic/img/icon_bad.png | Bin 0 -> 1287 bytes skin/board/basic/img/icon_comment.png | Bin 0 -> 3050 bytes skin/board/basic/img/icon_file.gif | Bin 107 -> 197 bytes skin/board/basic/img/icon_good.png | Bin 0 -> 1288 bytes skin/board/basic/img/icon_hot.gif | Bin 97 -> 319 bytes skin/board/basic/img/icon_img.gif | Bin 145 -> 317 bytes skin/board/basic/img/icon_link.gif | Bin 104 -> 319 bytes skin/board/basic/img/icon_lock.png | Bin 0 -> 1225 bytes skin/board/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes skin/board/basic/img/icon_new.gif | Bin 71 -> 77 bytes skin/board/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes skin/board/basic/img/icon_secret.gif | Bin 97 -> 318 bytes skin/board/basic/img/icon_share.png | Bin 0 -> 3064 bytes skin/board/basic/img/icon_view.png | Bin 0 -> 3130 bytes skin/board/basic/img/sch_bg.png | Bin 0 -> 996 bytes skin/board/basic/img/sch_btn.png | Bin 0 -> 1234 bytes skin/board/basic/list.skin.php | 179 +- skin/board/basic/style.css | 271 +- skin/board/basic/view.skin.php | 260 +- skin/board/basic/view_comment.skin.php | 193 +- skin/board/basic/write.skin.php | 230 +- skin/board/gallery/img/btn_next2.gif | Bin 0 -> 1898 bytes skin/board/gallery/img/btn_prev2.gif | Bin 0 -> 1185 bytes skin/board/gallery/img/close_btn.png | Bin 0 -> 1147 bytes skin/board/gallery/img/cmt_btn.png | Bin 0 -> 2862 bytes skin/board/gallery/img/facebook.png | Bin 0 -> 2955 bytes skin/board/gallery/img/gplus.png | Bin 0 -> 3041 bytes skin/board/gallery/img/icon_bad.png | Bin 0 -> 1287 bytes skin/board/gallery/img/icon_comment.png | Bin 0 -> 3050 bytes skin/board/gallery/img/icon_file.gif | Bin 107 -> 197 bytes skin/board/gallery/img/icon_good.png | Bin 0 -> 1288 bytes skin/board/gallery/img/icon_hot.gif | Bin 97 -> 319 bytes skin/board/gallery/img/icon_link.gif | Bin 104 -> 319 bytes skin/board/gallery/img/icon_lock.png | Bin 0 -> 1225 bytes skin/board/gallery/img/icon_new.gif | Bin 71 -> 77 bytes skin/board/gallery/img/icon_reply.gif | Bin 77 -> 1187 bytes skin/board/gallery/img/icon_secret.gif | Bin 97 -> 318 bytes skin/board/gallery/img/icon_share.png | Bin 0 -> 3064 bytes skin/board/gallery/img/icon_view.png | Bin 0 -> 3130 bytes skin/board/gallery/img/sch_bg.png | Bin 0 -> 996 bytes skin/board/gallery/img/sch_btn.png | Bin 0 -> 1234 bytes skin/board/gallery/img/twitter.png | Bin 0 -> 2995 bytes skin/board/gallery/list.skin.php | 228 +- skin/board/gallery/style.css | 284 +- skin/board/gallery/view.skin.php | 260 +- skin/board/gallery/view_comment.skin.php | 193 +- skin/board/gallery/write.skin.php | 230 +- skin/connect/basic/current_connect.skin.php | 34 +- skin/connect/basic/style.css | 15 +- skin/content/basic/style.css | 5 +- skin/faq/basic/list.skin.php | 32 +- skin/faq/basic/style.css | 32 +- skin/latest/basic/img/icon_file.gif | Bin 107 -> 197 bytes skin/latest/basic/img/icon_hot.gif | Bin 97 -> 319 bytes skin/latest/basic/img/icon_img.gif | Bin 145 -> 317 bytes skin/latest/basic/img/icon_link.gif | Bin 104 -> 319 bytes skin/latest/basic/img/icon_lock.png | Bin 0 -> 1225 bytes skin/latest/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes skin/latest/basic/img/icon_secret.gif | Bin 97 -> 318 bytes skin/latest/basic/img/icon_view.png | Bin 0 -> 3130 bytes skin/latest/basic/img/more-btn.gif | Bin 0 -> 1204 bytes skin/latest/basic/img/more_bg.gif | Bin 0 -> 1172 bytes skin/latest/basic/latest.skin.php | 41 +- skin/latest/basic/style.css | 33 +- skin/latest/notice/latest.skin.php | 53 + skin/latest/notice/style.css | 16 + skin/latest/pic_basic/latest.skin.php | 66 + skin/latest/pic_basic/style.css | 24 + skin/member/basic/formmail.skin.php | 99 +- skin/member/basic/login.skin.php | 29 +- skin/member/basic/member_confirm.skin.php | 11 +- skin/member/basic/memo.skin.php | 73 +- skin/member/basic/memo_form.skin.php | 80 +- skin/member/basic/memo_view.skin.php | 79 +- skin/member/basic/password.skin.php | 10 +- skin/member/basic/password_lost.skin.php | 29 +- skin/member/basic/point.skin.php | 131 +- skin/member/basic/profile.skin.php | 48 +- skin/member/basic/register.skin.php | 33 +- skin/member/basic/register_form.skin.php | 390 +-- skin/member/basic/register_result.skin.php | 12 +- skin/member/basic/scrap.skin.php | 43 +- skin/member/basic/scrap_popin.skin.php | 43 +- skin/member/basic/style.css | 190 +- skin/new/basic/new.skin.php | 12 +- skin/new/basic/style.css | 11 +- skin/outlogin/basic/img/info_edit.png | Bin 0 -> 1341 bytes skin/outlogin/basic/outlogin.skin.1.php | 48 +- skin/outlogin/basic/outlogin.skin.2.php | 25 +- skin/outlogin/basic/style.css | 73 +- skin/poll/basic/poll.skin.php | 26 +- skin/poll/basic/poll_result.skin.php | 181 +- skin/poll/basic/style.css | 85 +- skin/popular/basic/popular.skin.php | 4 +- skin/popular/basic/style.css | 18 +- skin/qa/basic/list.skin.php | 88 +- skin/qa/basic/style.css | 141 +- skin/qa/basic/view.answer.skin.php | 10 +- skin/qa/basic/view.answerform.skin.php | 42 +- skin/qa/basic/view.skin.php | 146 +- skin/qa/basic/write.skin.php | 137 +- skin/search/basic/search.skin.php | 34 +- skin/search/basic/style.css | 62 +- skin/social/img/btn_p.jpg | Bin 0 -> 22909 bytes skin/social/img/login_id.jpg | Bin 0 -> 466 bytes skin/social/img/login_pw.jpg | Bin 0 -> 480 bytes skin/social/img/plus_minus.png | Bin 0 -> 2863 bytes skin/social/img/sns_fb_s.png | Bin 0 -> 1580 bytes skin/social/img/sns_gp_s.png | Bin 0 -> 1562 bytes skin/social/img/sns_kakao_s.png | Bin 0 -> 2104 bytes skin/social/img/sns_logo.png | Bin 0 -> 6045 bytes skin/social/img/sns_logo_not.png | Bin 0 -> 5465 bytes skin/social/img/sns_naver_s.png | Bin 0 -> 1571 bytes skin/social/img/sns_payco_s.png | Bin 0 -> 1336 bytes skin/social/img/sns_twitter_s.png | Bin 0 -> 1736 bytes skin/social/index.php | 0 skin/social/social_login.skin.php | 85 + skin/social/social_outlogin.skin.1.php | 85 + skin/social/social_register.skin.php | 88 + skin/social/social_register_member.skin.php | 192 ++ skin/social/social_u_register_form.skin.php | 163 + skin/social/style.css | 148 + skin/visit/basic/style.css | 24 +- skin/visit/basic/visit.skin.php | 26 +- tail.php | 40 +- theme/basic/css/default.css | 429 ++- theme/basic/css/mobile.css | 306 +- theme/basic/group.php | 9 +- theme/basic/head.php | 266 +- theme/basic/head.sub.php | 6 +- theme/basic/img/btn_end.gif | Bin 0 -> 1176 bytes theme/basic/img/btn_first.gif | Bin 0 -> 1885 bytes theme/basic/img/btn_next.gif | Bin 0 -> 1169 bytes theme/basic/img/btn_prev.gif | Bin 0 -> 1873 bytes theme/basic/img/bullet.gif | Bin 0 -> 1165 bytes theme/basic/img/close_btn.gif | Bin 0 -> 1209 bytes theme/basic/img/gnb_bg.gif | Bin 0 -> 1169 bytes theme/basic/img/gnb_bg2.gif | Bin 0 -> 49 bytes theme/basic/img/mobile/btn_close.png | Bin 0 -> 3265 bytes theme/basic/img/mobile/gnb_bg.png | Bin 0 -> 1012 bytes theme/basic/img/mobile/gnb_bg2.png | Bin 0 -> 976 bytes theme/basic/img/more-btn.gif | Bin 0 -> 1204 bytes theme/basic/img/no_profile.gif | Bin 0 -> 1953 bytes theme/basic/img/require.png | Bin 0 -> 2922 bytes theme/basic/index.php | 55 +- theme/basic/mobile/head.php | 153 +- .../mobile/skin/board/basic/img/btn_next2.gif | Bin 0 -> 55 bytes .../mobile/skin/board/basic/img/btn_prev2.gif | Bin 0 -> 56 bytes .../mobile/skin/board/basic/img/cmt_btn.png | Bin 0 -> 2862 bytes .../mobile/skin/board/basic/img/icon_bad.png | Bin 0 -> 1287 bytes .../skin/board/basic/img/icon_comment.png | Bin 0 -> 1604 bytes .../mobile/skin/board/basic/img/icon_file.gif | Bin 107 -> 197 bytes .../mobile/skin/board/basic/img/icon_good.png | Bin 0 -> 1288 bytes .../mobile/skin/board/basic/img/icon_hot.gif | Bin 97 -> 319 bytes .../mobile/skin/board/basic/img/icon_link.gif | Bin 104 -> 319 bytes .../mobile/skin/board/basic/img/icon_lock.png | Bin 0 -> 1225 bytes .../skin/board/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes .../skin/board/basic/img/icon_secret.gif | Bin 97 -> 318 bytes .../mobile/skin/board/basic/img/icon_view.png | Bin 0 -> 1936 bytes .../mobile/skin/board/basic/img/require.png | Bin 0 -> 2922 bytes .../mobile/skin/board/basic/img/sch_btn.png | Bin 0 -> 1234 bytes .../mobile/skin/board/basic/list.skin.php | 154 +- theme/basic/mobile/skin/board/basic/style.css | 267 +- .../mobile/skin/board/basic/view.skin.php | 224 +- .../skin/board/basic/view_comment.skin.php | 179 +- .../mobile/skin/board/basic/write.skin.php | 160 +- .../mobile/skin/board/gallery/list.skin.php | 146 +- .../basic/mobile/skin/board/gallery/style.css | 221 +- .../mobile/skin/board/gallery/view.skin.php | 226 +- .../skin/board/gallery/view_comment.skin.php | 179 +- .../mobile/skin/board/gallery/write.skin.php | 161 +- .../connect/basic/current_connect.skin.php | 30 +- .../basic/mobile/skin/connect/basic/style.css | 18 +- .../basic/mobile/skin/faq/basic/list.skin.php | 22 +- theme/basic/mobile/skin/faq/basic/style.css | 37 +- .../skin/latest/basic/img/icon_comment.png | Bin 0 -> 1604 bytes .../skin/latest/basic/img/icon_file.gif | Bin 107 -> 197 bytes .../mobile/skin/latest/basic/img/icon_hot.gif | Bin 97 -> 319 bytes .../mobile/skin/latest/basic/img/icon_img.gif | Bin 145 -> 317 bytes .../skin/latest/basic/img/icon_link.gif | Bin 104 -> 319 bytes .../skin/latest/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes .../skin/latest/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes .../skin/latest/basic/img/icon_secret.gif | Bin 97 -> 318 bytes .../mobile/skin/latest/basic/latest.skin.php | 27 +- .../basic/mobile/skin/latest/basic/style.css | 21 +- .../skin/member/basic/formmail.skin.php | 97 +- .../mobile/skin/member/basic/img/btn_del.gif | Bin 0 -> 1187 bytes .../skin/member/basic/img/icon_file.gif | Bin 0 -> 197 bytes .../mobile/skin/member/basic/login.skin.php | 23 +- .../skin/member/basic/member_confirm.skin.php | 4 - .../mobile/skin/member/basic/memo.skin.php | 54 +- .../skin/member/basic/memo_form.skin.php | 54 +- .../skin/member/basic/memo_view.skin.php | 63 +- .../skin/member/basic/password.skin.php | 3 - .../skin/member/basic/password_lost.skin.php | 31 +- .../mobile/skin/member/basic/point.skin.php | 125 +- .../mobile/skin/member/basic/profile.skin.php | 6 +- .../skin/member/basic/register.skin.php | 43 +- .../skin/member/basic/register_form.skin.php | 388 +-- .../member/basic/register_result.skin.php | 59 +- .../mobile/skin/member/basic/scrap.skin.php | 8 +- .../skin/member/basic/scrap_popin.skin.php | 43 +- .../basic/mobile/skin/member/basic/style.css | 197 +- .../basic/mobile/skin/new/basic/new.skin.php | 32 +- theme/basic/mobile/skin/new/basic/style.css | 14 +- .../skin/outlogin/basic/img/icon_edit.png | Bin 0 -> 1605 bytes .../skin/outlogin/basic/img/icon_memo.png | Bin 0 -> 1852 bytes .../skin/outlogin/basic/img/icon_point.png | Bin 0 -> 1923 bytes .../skin/outlogin/basic/img/icon_scrap.png | Bin 0 -> 1717 bytes .../skin/outlogin/basic/outlogin.skin.1.php | 15 +- .../skin/outlogin/basic/outlogin.skin.2.php | 27 +- .../mobile/skin/outlogin/basic/style.css | 44 +- .../mobile/skin/poll/basic/poll.skin.php | 6 +- .../skin/poll/basic/poll_result.skin.php | 161 +- theme/basic/mobile/skin/poll/basic/style.css | 97 +- .../skin/popular/basic/popular.skin.php | 22 +- .../basic/mobile/skin/popular/basic/style.css | 15 +- .../basic/mobile/skin/qa/basic/list.skin.php | 39 +- theme/basic/mobile/skin/qa/basic/style.css | 97 +- .../mobile/skin/qa/basic/view.answer.skin.php | 13 +- .../skin/qa/basic/view.answerform.skin.php | 36 +- .../basic/mobile/skin/qa/basic/view.skin.php | 227 +- .../basic/mobile/skin/qa/basic/write.skin.php | 124 +- .../mobile/skin/search/basic/search.skin.php | 35 +- .../basic/mobile/skin/search/basic/style.css | 52 +- theme/basic/mobile/skin/visit/basic/style.css | 20 +- .../mobile/skin/visit/basic/visit.skin.php | 26 +- theme/basic/mobile/tail.php | 57 +- theme/basic/screenshot.png | Bin 11304 -> 36358 bytes .../basic/skin/board/basic/img/btn_next2.gif | Bin 0 -> 1898 bytes .../basic/skin/board/basic/img/btn_prev2.gif | Bin 0 -> 1185 bytes .../basic/skin/board/basic/img/close_btn.png | Bin 0 -> 1147 bytes theme/basic/skin/board/basic/img/cmt_btn.png | Bin 0 -> 2862 bytes theme/basic/skin/board/basic/img/icon_bad.png | Bin 0 -> 1287 bytes .../skin/board/basic/img/icon_comment.png | Bin 0 -> 3050 bytes .../basic/skin/board/basic/img/icon_file.gif | Bin 107 -> 197 bytes .../basic/skin/board/basic/img/icon_good.png | Bin 0 -> 1288 bytes theme/basic/skin/board/basic/img/icon_hot.gif | Bin 97 -> 319 bytes theme/basic/skin/board/basic/img/icon_img.gif | Bin 145 -> 317 bytes .../basic/skin/board/basic/img/icon_link.gif | Bin 104 -> 319 bytes .../basic/skin/board/basic/img/icon_lock.png | Bin 0 -> 1225 bytes .../skin/board/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes theme/basic/skin/board/basic/img/icon_new.gif | Bin 71 -> 77 bytes .../basic/skin/board/basic/img/icon_reply.gif | Bin 77 -> 1187 bytes .../skin/board/basic/img/icon_secret.gif | Bin 97 -> 318 bytes .../basic/skin/board/basic/img/icon_share.png | Bin 0 -> 3064 bytes .../basic/skin/board/basic/img/icon_view.png | Bin 0 -> 3130 bytes theme/basic/skin/board/basic/img/sch_bg.png | Bin 0 -> 996 bytes theme/basic/skin/board/basic/img/sch_btn.png | Bin 0 -> 1234 bytes theme/basic/skin/board/basic/list.skin.php | 179 +- theme/basic/skin/board/basic/style.css | 271 +- theme/basic/skin/board/basic/view.skin.php | 260 +- .../skin/board/basic/view_comment.skin.php | 193 +- theme/basic/skin/board/basic/write.skin.php | 230 +- .../skin/board/gallery/img/btn_next2.gif | Bin 0 -> 1898 bytes .../skin/board/gallery/img/btn_prev2.gif | Bin 0 -> 1185 bytes .../skin/board/gallery/img/close_btn.png | Bin 0 -> 1147 bytes .../basic/skin/board/gallery/img/cmt_btn.png | Bin 0 -> 2862 bytes .../basic/skin/board/gallery/img/facebook.png | Bin 0 -> 2955 bytes theme/basic/skin/board/gallery/img/gplus.png | Bin 0 -> 3041 bytes .../basic/skin/board/gallery/img/icon_bad.png | Bin 0 -> 1287 bytes .../skin/board/gallery/img/icon_comment.png | Bin 0 -> 3050 bytes .../skin/board/gallery/img/icon_file.gif | Bin 107 -> 197 bytes .../skin/board/gallery/img/icon_good.png | Bin 0 -> 1288 bytes .../basic/skin/board/gallery/img/icon_hot.gif | Bin 97 -> 319 bytes .../skin/board/gallery/img/icon_link.gif | Bin 104 -> 319 bytes .../skin/board/gallery/img/icon_lock.png | Bin 0 -> 1225 bytes .../basic/skin/board/gallery/img/icon_new.gif | Bin 71 -> 77 bytes .../skin/board/gallery/img/icon_reply.gif | Bin 77 -> 1187 bytes .../skin/board/gallery/img/icon_secret.gif | Bin 97 -> 318 bytes .../skin/board/gallery/img/icon_share.png | Bin 0 -> 3064 bytes .../skin/board/gallery/img/icon_view.png | Bin 0 -> 3130 bytes theme/basic/skin/board/gallery/img/sch_bg.png | Bin 0 -> 996 bytes .../basic/skin/board/gallery/img/sch_btn.png | Bin 0 -> 1234 bytes .../basic/skin/board/gallery/img/twitter.png | Bin 0 -> 2995 bytes theme/basic/skin/board/gallery/list.skin.php | 228 +- theme/basic/skin/board/gallery/style.css | 284 +- theme/basic/skin/board/gallery/view.skin.php | 260 +- .../skin/board/gallery/view_comment.skin.php | 193 +- theme/basic/skin/board/gallery/write.skin.php | 230 +- .../connect/basic/current_connect.skin.php | 34 +- theme/basic/skin/connect/basic/style.css | 15 +- theme/basic/skin/content/basic/style.css | 5 +- theme/basic/skin/faq/basic/list.skin.php | 32 +- theme/basic/skin/faq/basic/style.css | 32 +- .../basic/skin/latest/basic/img/icon_file.gif | Bin 107 -> 197 bytes .../basic/skin/latest/basic/img/icon_hot.gif | Bin 97 -> 319 bytes .../basic/skin/latest/basic/img/icon_img.gif | Bin 145 -> 317 bytes .../basic/skin/latest/basic/img/icon_link.gif | Bin 104 -> 319 bytes .../basic/skin/latest/basic/img/icon_lock.png | Bin 0 -> 1225 bytes .../skin/latest/basic/img/icon_mobile.gif | Bin 62 -> 339 bytes .../skin/latest/basic/img/icon_secret.gif | Bin 97 -> 318 bytes .../basic/skin/latest/basic/img/icon_view.png | Bin 0 -> 3130 bytes .../basic/skin/latest/basic/img/more-btn.gif | Bin 0 -> 1204 bytes theme/basic/skin/latest/basic/img/more_bg.gif | Bin 0 -> 1172 bytes theme/basic/skin/latest/basic/latest.skin.php | 40 +- theme/basic/skin/latest/basic/style.css | 33 +- .../basic/skin/latest/notice/latest.skin.php | 53 + theme/basic/skin/latest/notice/style.css | 16 + .../skin/latest/pic_basic/latest.skin.php | 67 + theme/basic/skin/latest/pic_basic/style.css | 24 + .../basic/skin/member/basic/formmail.skin.php | 97 +- theme/basic/skin/member/basic/login.skin.php | 29 +- .../skin/member/basic/member_confirm.skin.php | 11 +- theme/basic/skin/member/basic/memo.skin.php | 73 +- .../skin/member/basic/memo_form.skin.php | 80 +- .../skin/member/basic/memo_view.skin.php | 79 +- .../basic/skin/member/basic/password.skin.php | 10 +- .../skin/member/basic/password_lost.skin.php | 29 +- theme/basic/skin/member/basic/point.skin.php | 131 +- .../basic/skin/member/basic/profile.skin.php | 48 +- .../basic/skin/member/basic/register.skin.php | 32 +- .../skin/member/basic/register_form.skin.php | 390 +-- .../member/basic/register_result.skin.php | 12 +- theme/basic/skin/member/basic/scrap.skin.php | 43 +- .../skin/member/basic/scrap_popin.skin.php | 43 +- theme/basic/skin/member/basic/style.css | 190 +- theme/basic/skin/new/basic/new.skin.php | 12 +- theme/basic/skin/new/basic/style.css | 11 +- .../skin/outlogin/basic/img/info_edit.png | Bin 0 -> 1341 bytes .../skin/outlogin/basic/outlogin.skin.1.php | 48 +- .../skin/outlogin/basic/outlogin.skin.2.php | 25 +- theme/basic/skin/outlogin/basic/style.css | 73 +- theme/basic/skin/poll/basic/poll.skin.php | 26 +- .../skin/poll/basic/poll_result.skin.php | 181 +- theme/basic/skin/poll/basic/style.css | 85 +- .../basic/skin/popular/basic/popular.skin.php | 4 +- theme/basic/skin/popular/basic/style.css | 18 +- theme/basic/skin/qa/basic/list.skin.php | 88 +- theme/basic/skin/qa/basic/style.css | 141 +- .../basic/skin/qa/basic/view.answer.skin.php | 10 +- .../skin/qa/basic/view.answerform.skin.php | 42 +- theme/basic/skin/qa/basic/view.skin.php | 146 +- theme/basic/skin/qa/basic/write.skin.php | 137 +- theme/basic/skin/search/basic/search.skin.php | 34 +- theme/basic/skin/search/basic/style.css | 62 +- theme/basic/skin/visit/basic/style.css | 24 +- theme/basic/skin/visit/basic/visit.skin.php | 26 +- theme/basic/tail.php | 40 +- theme/basic/theme.config.php | 4 +- 733 files changed, 36660 insertions(+), 11623 deletions(-) create mode 100644 adm/dbupgrade.php create mode 100644 adm/img/close.png create mode 100644 adm/img/home_icon.png delete mode 100644 adm/img/logo.jpg create mode 100644 adm/img/logo.png create mode 100644 adm/img/menu-1-1.png create mode 100644 adm/img/menu-1.png create mode 100644 adm/img/menu-2-1.png create mode 100644 adm/img/menu-2.png create mode 100644 adm/img/menu-3-1.png create mode 100644 adm/img/menu-3.png create mode 100644 adm/img/menu-4-1.png create mode 100644 adm/img/menu-4.png create mode 100644 adm/img/menu-6-1.png create mode 100644 adm/img/menu-6.png create mode 100644 adm/img/menu-7-1.png create mode 100644 adm/img/menu-7.png create mode 100644 adm/img/menu-cl.png create mode 100644 adm/img/menu-op.png create mode 100644 adm/img/menu_default.png create mode 100644 adm/img/menu_default_on.png create mode 100644 adm/img/menulist_sub.png create mode 100644 adm/img/op_btn.png create mode 100644 adm/img/op_btn1.gif create mode 100644 adm/img/page_1.png create mode 100644 adm/img/page_2.png create mode 100644 adm/img/page_3.png create mode 100644 adm/img/page_4.png create mode 100644 adm/img/sch_btn.png create mode 100644 adm/img/service_img3.jpg create mode 100644 adm/img/shop_icon.png create mode 100644 adm/img/social/sns_logo.png create mode 100644 adm/img/social/sns_logo_not.png create mode 100644 adm/img/svc_btn_06.jpg create mode 100644 adm/img/tit_op_btn.gif create mode 100644 adm/img/wrest.gif create mode 100644 extend/default.config.php create mode 100644 extend/social_login.extend.php create mode 100644 img/btn_end.gif create mode 100644 img/btn_first.gif create mode 100644 img/btn_next.gif create mode 100644 img/btn_prev.gif create mode 100644 img/btn_top.gif create mode 100644 img/captcha2.png create mode 100644 img/close_btn.gif create mode 100644 img/close_btn.png create mode 100644 img/ft_logo.png create mode 100644 img/gnb_bg.gif create mode 100644 img/gnb_bg2.gif delete mode 100644 img/logo.jpg create mode 100644 img/logo.png create mode 100644 img/m_logo.png create mode 100644 img/mobile/btn_close.png create mode 100644 img/mobile/gnb_bg.png create mode 100644 img/mobile/gnb_bg2.png create mode 100644 img/mobile/gnb_sch.png create mode 100644 img/mobile/icon_menu.png create mode 100644 img/mobile/icon_my.png create mode 100644 img/no_img.png create mode 100644 img/no_profile.gif create mode 100644 img/require.png create mode 100644 img/sch_btn.png create mode 100644 img/ts01.png create mode 100644 img/ts02.png create mode 100644 img/ts03.png create mode 100644 js/font-awesome/HELP-US-OUT.txt create mode 100644 js/font-awesome/css/font-awesome.css create mode 100644 js/font-awesome/css/font-awesome.min.css create mode 100644 js/font-awesome/fonts/FontAwesome.otf create mode 100644 js/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 js/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 js/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 js/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 js/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 js/font-awesome/less/animated.less create mode 100644 js/font-awesome/less/bordered-pulled.less create mode 100644 js/font-awesome/less/core.less create mode 100644 js/font-awesome/less/fixed-width.less create mode 100644 js/font-awesome/less/font-awesome.less create mode 100644 js/font-awesome/less/icons.less create mode 100644 js/font-awesome/less/larger.less create mode 100644 js/font-awesome/less/list.less create mode 100644 js/font-awesome/less/mixins.less create mode 100644 js/font-awesome/less/path.less create mode 100644 js/font-awesome/less/rotated-flipped.less create mode 100644 js/font-awesome/less/screen-reader.less create mode 100644 js/font-awesome/less/stacked.less create mode 100644 js/font-awesome/less/variables.less create mode 100644 js/font-awesome/scss/_animated.scss create mode 100644 js/font-awesome/scss/_bordered-pulled.scss create mode 100644 js/font-awesome/scss/_core.scss create mode 100644 js/font-awesome/scss/_fixed-width.scss create mode 100644 js/font-awesome/scss/_icons.scss create mode 100644 js/font-awesome/scss/_larger.scss create mode 100644 js/font-awesome/scss/_list.scss create mode 100644 js/font-awesome/scss/_mixins.scss create mode 100644 js/font-awesome/scss/_path.scss create mode 100644 js/font-awesome/scss/_rotated-flipped.scss create mode 100644 js/font-awesome/scss/_screen-reader.scss create mode 100644 js/font-awesome/scss/_stacked.scss create mode 100644 js/font-awesome/scss/_variables.scss create mode 100644 js/font-awesome/scss/font-awesome.scss create mode 100644 js/jquery.anchorScroll.js create mode 100644 js/jquery.bxslider.js create mode 100644 js/placeholders.min.js create mode 100644 js/remodal/remodal-default-theme.css create mode 100644 js/remodal/remodal.css create mode 100644 js/remodal/remodal.js create mode 100644 mobile/skin/board/basic/img/btn_next2.gif create mode 100644 mobile/skin/board/basic/img/btn_prev2.gif create mode 100644 mobile/skin/board/basic/img/cmt_btn.png create mode 100644 mobile/skin/board/basic/img/icon_bad.png create mode 100644 mobile/skin/board/basic/img/icon_comment.png create mode 100644 mobile/skin/board/basic/img/icon_good.png create mode 100644 mobile/skin/board/basic/img/icon_lock.png create mode 100644 mobile/skin/board/basic/img/icon_view.png create mode 100644 mobile/skin/board/basic/img/require.png create mode 100644 mobile/skin/board/basic/img/sch_btn.png create mode 100644 mobile/skin/latest/basic/img/icon_comment.png create mode 100644 mobile/skin/member/basic/img/btn_del.gif create mode 100644 mobile/skin/member/basic/img/icon_file.gif create mode 100644 mobile/skin/outlogin/basic/img/icon_edit.png create mode 100644 mobile/skin/outlogin/basic/img/icon_memo.png create mode 100644 mobile/skin/outlogin/basic/img/icon_point.png create mode 100644 mobile/skin/outlogin/basic/img/icon_scrap.png create mode 100644 mobile/skin/social/img/btn_p.jpg create mode 100644 mobile/skin/social/img/login_id.jpg create mode 100644 mobile/skin/social/img/login_pw.jpg create mode 100644 mobile/skin/social/img/plus_minus.png create mode 100644 mobile/skin/social/img/sns_fb_s.png create mode 100644 mobile/skin/social/img/sns_gp_s.png create mode 100644 mobile/skin/social/img/sns_kakao_s.png create mode 100644 mobile/skin/social/img/sns_logo.png create mode 100644 mobile/skin/social/img/sns_logo_not.png create mode 100644 mobile/skin/social/img/sns_naver_s.png create mode 100644 mobile/skin/social/img/sns_payco_s.png create mode 100644 mobile/skin/social/img/sns_twitter_s.png create mode 100644 mobile/skin/social/index.php create mode 100644 mobile/skin/social/social_login.skin.php create mode 100644 mobile/skin/social/social_outlogin.skin.1.php create mode 100644 mobile/skin/social/social_register.skin.php create mode 100644 mobile/skin/social/social_register_member.skin.php create mode 100644 mobile/skin/social/social_u_register_form.skin.php create mode 100644 mobile/skin/social/style.css create mode 100644 plugin/recaptcha/_common.php create mode 100644 plugin/recaptcha/captcha.lib.php create mode 100644 plugin/recaptcha/recaptcha.class.php create mode 100644 plugin/recaptcha/recaptcha.js create mode 100644 plugin/recaptcha/recaptcha.user.lib.php create mode 100644 plugin/recaptcha_inv/_common.php create mode 100644 plugin/recaptcha_inv/captcha.lib.php create mode 100644 plugin/recaptcha_inv/recaptcha.class.php create mode 100644 plugin/recaptcha_inv/recaptcha.js create mode 100644 plugin/recaptcha_inv/recaptcha.user.lib.php create mode 100644 plugin/social/Hybrid/Auth.php create mode 100644 plugin/social/Hybrid/Endpoint.php create mode 100644 plugin/social/Hybrid/Error.php create mode 100644 plugin/social/Hybrid/Exception.php create mode 100644 plugin/social/Hybrid/Logger.php create mode 100644 plugin/social/Hybrid/Provider_Adapter.php create mode 100644 plugin/social/Hybrid/Provider_Model.php create mode 100644 plugin/social/Hybrid/Provider_Model_OAuth1.php create mode 100644 plugin/social/Hybrid/Provider_Model_OAuth2.php create mode 100644 plugin/social/Hybrid/Provider_Model_OpenID.php create mode 100644 plugin/social/Hybrid/Providers/Facebook.php create mode 100644 plugin/social/Hybrid/Providers/Google.php create mode 100644 plugin/social/Hybrid/Providers/Kakao.php create mode 100644 plugin/social/Hybrid/Providers/Naver.php create mode 100644 plugin/social/Hybrid/Providers/Payco.php create mode 100644 plugin/social/Hybrid/Providers/Twitter.php create mode 100644 plugin/social/Hybrid/Storage.php create mode 100644 plugin/social/Hybrid/StorageInterface.php create mode 100644 plugin/social/Hybrid/User.php create mode 100644 plugin/social/Hybrid/User_Activity.php create mode 100644 plugin/social/Hybrid/User_Contact.php create mode 100644 plugin/social/Hybrid/User_Profile.php create mode 100644 plugin/social/Hybrid/index.html create mode 100644 plugin/social/Hybrid/resources/index.html create mode 100644 plugin/social/Hybrid/resources/openid_policy.html create mode 100644 plugin/social/Hybrid/resources/openid_realm.html create mode 100644 plugin/social/Hybrid/resources/openid_xrds.xml create mode 100644 plugin/social/Hybrid/thirdparty/OAuth/OAuth.php create mode 100644 plugin/social/Hybrid/thirdparty/OAuth/OAuth1Client.php create mode 100644 plugin/social/Hybrid/thirdparty/OAuth/OAuth2Client.php create mode 100644 plugin/social/Hybrid/thirdparty/OpenID/LightOpenID.php create mode 100644 plugin/social/Hybrid/thirdparty/index.html create mode 100644 plugin/social/_common.php create mode 100644 plugin/social/config.php create mode 100644 plugin/social/error.php create mode 100644 plugin/social/img/loading_icon.gif create mode 100644 plugin/social/includes/functions.php create mode 100644 plugin/social/includes/g5_endpoint.php create mode 100644 plugin/social/includes/g5_endpoint_class.php create mode 100644 plugin/social/includes/index.php create mode 100644 plugin/social/includes/loading.php create mode 100644 plugin/social/includes/providers.php create mode 100644 plugin/social/index.php create mode 100644 plugin/social/popup.php create mode 100644 plugin/social/register_member.php create mode 100644 plugin/social/register_member_update.php create mode 100644 plugin/social/unlink.php create mode 100644 skin/board/basic/img/btn_next2.gif create mode 100644 skin/board/basic/img/btn_prev2.gif create mode 100644 skin/board/basic/img/close_btn.png create mode 100644 skin/board/basic/img/cmt_btn.png create mode 100644 skin/board/basic/img/icon_bad.png create mode 100644 skin/board/basic/img/icon_comment.png create mode 100644 skin/board/basic/img/icon_good.png create mode 100644 skin/board/basic/img/icon_lock.png create mode 100644 skin/board/basic/img/icon_share.png create mode 100644 skin/board/basic/img/icon_view.png create mode 100644 skin/board/basic/img/sch_bg.png create mode 100644 skin/board/basic/img/sch_btn.png create mode 100644 skin/board/gallery/img/btn_next2.gif create mode 100644 skin/board/gallery/img/btn_prev2.gif create mode 100644 skin/board/gallery/img/close_btn.png create mode 100644 skin/board/gallery/img/cmt_btn.png create mode 100644 skin/board/gallery/img/facebook.png create mode 100644 skin/board/gallery/img/gplus.png create mode 100644 skin/board/gallery/img/icon_bad.png create mode 100644 skin/board/gallery/img/icon_comment.png create mode 100644 skin/board/gallery/img/icon_good.png create mode 100644 skin/board/gallery/img/icon_lock.png create mode 100644 skin/board/gallery/img/icon_share.png create mode 100644 skin/board/gallery/img/icon_view.png create mode 100644 skin/board/gallery/img/sch_bg.png create mode 100644 skin/board/gallery/img/sch_btn.png create mode 100644 skin/board/gallery/img/twitter.png create mode 100644 skin/latest/basic/img/icon_lock.png create mode 100644 skin/latest/basic/img/icon_view.png create mode 100644 skin/latest/basic/img/more-btn.gif create mode 100644 skin/latest/basic/img/more_bg.gif create mode 100644 skin/latest/notice/latest.skin.php create mode 100644 skin/latest/notice/style.css create mode 100644 skin/latest/pic_basic/latest.skin.php create mode 100644 skin/latest/pic_basic/style.css create mode 100644 skin/outlogin/basic/img/info_edit.png create mode 100644 skin/social/img/btn_p.jpg create mode 100644 skin/social/img/login_id.jpg create mode 100644 skin/social/img/login_pw.jpg create mode 100644 skin/social/img/plus_minus.png create mode 100644 skin/social/img/sns_fb_s.png create mode 100644 skin/social/img/sns_gp_s.png create mode 100644 skin/social/img/sns_kakao_s.png create mode 100644 skin/social/img/sns_logo.png create mode 100644 skin/social/img/sns_logo_not.png create mode 100644 skin/social/img/sns_naver_s.png create mode 100644 skin/social/img/sns_payco_s.png create mode 100644 skin/social/img/sns_twitter_s.png create mode 100644 skin/social/index.php create mode 100644 skin/social/social_login.skin.php create mode 100644 skin/social/social_outlogin.skin.1.php create mode 100644 skin/social/social_register.skin.php create mode 100644 skin/social/social_register_member.skin.php create mode 100644 skin/social/social_u_register_form.skin.php create mode 100644 skin/social/style.css create mode 100644 theme/basic/img/btn_end.gif create mode 100644 theme/basic/img/btn_first.gif create mode 100644 theme/basic/img/btn_next.gif create mode 100644 theme/basic/img/btn_prev.gif create mode 100644 theme/basic/img/bullet.gif create mode 100644 theme/basic/img/close_btn.gif create mode 100644 theme/basic/img/gnb_bg.gif create mode 100644 theme/basic/img/gnb_bg2.gif create mode 100644 theme/basic/img/mobile/btn_close.png create mode 100644 theme/basic/img/mobile/gnb_bg.png create mode 100644 theme/basic/img/mobile/gnb_bg2.png create mode 100644 theme/basic/img/more-btn.gif create mode 100644 theme/basic/img/no_profile.gif create mode 100644 theme/basic/img/require.png create mode 100644 theme/basic/mobile/skin/board/basic/img/btn_next2.gif create mode 100644 theme/basic/mobile/skin/board/basic/img/btn_prev2.gif create mode 100644 theme/basic/mobile/skin/board/basic/img/cmt_btn.png create mode 100644 theme/basic/mobile/skin/board/basic/img/icon_bad.png create mode 100644 theme/basic/mobile/skin/board/basic/img/icon_comment.png create mode 100644 theme/basic/mobile/skin/board/basic/img/icon_good.png create mode 100644 theme/basic/mobile/skin/board/basic/img/icon_lock.png create mode 100644 theme/basic/mobile/skin/board/basic/img/icon_view.png create mode 100644 theme/basic/mobile/skin/board/basic/img/require.png create mode 100644 theme/basic/mobile/skin/board/basic/img/sch_btn.png create mode 100644 theme/basic/mobile/skin/latest/basic/img/icon_comment.png create mode 100644 theme/basic/mobile/skin/member/basic/img/btn_del.gif create mode 100644 theme/basic/mobile/skin/member/basic/img/icon_file.gif create mode 100644 theme/basic/mobile/skin/outlogin/basic/img/icon_edit.png create mode 100644 theme/basic/mobile/skin/outlogin/basic/img/icon_memo.png create mode 100644 theme/basic/mobile/skin/outlogin/basic/img/icon_point.png create mode 100644 theme/basic/mobile/skin/outlogin/basic/img/icon_scrap.png create mode 100644 theme/basic/skin/board/basic/img/btn_next2.gif create mode 100644 theme/basic/skin/board/basic/img/btn_prev2.gif create mode 100644 theme/basic/skin/board/basic/img/close_btn.png create mode 100644 theme/basic/skin/board/basic/img/cmt_btn.png create mode 100644 theme/basic/skin/board/basic/img/icon_bad.png create mode 100644 theme/basic/skin/board/basic/img/icon_comment.png create mode 100644 theme/basic/skin/board/basic/img/icon_good.png create mode 100644 theme/basic/skin/board/basic/img/icon_lock.png create mode 100644 theme/basic/skin/board/basic/img/icon_share.png create mode 100644 theme/basic/skin/board/basic/img/icon_view.png create mode 100644 theme/basic/skin/board/basic/img/sch_bg.png create mode 100644 theme/basic/skin/board/basic/img/sch_btn.png create mode 100644 theme/basic/skin/board/gallery/img/btn_next2.gif create mode 100644 theme/basic/skin/board/gallery/img/btn_prev2.gif create mode 100644 theme/basic/skin/board/gallery/img/close_btn.png create mode 100644 theme/basic/skin/board/gallery/img/cmt_btn.png create mode 100644 theme/basic/skin/board/gallery/img/facebook.png create mode 100644 theme/basic/skin/board/gallery/img/gplus.png create mode 100644 theme/basic/skin/board/gallery/img/icon_bad.png create mode 100644 theme/basic/skin/board/gallery/img/icon_comment.png create mode 100644 theme/basic/skin/board/gallery/img/icon_good.png create mode 100644 theme/basic/skin/board/gallery/img/icon_lock.png create mode 100644 theme/basic/skin/board/gallery/img/icon_share.png create mode 100644 theme/basic/skin/board/gallery/img/icon_view.png create mode 100644 theme/basic/skin/board/gallery/img/sch_bg.png create mode 100644 theme/basic/skin/board/gallery/img/sch_btn.png create mode 100644 theme/basic/skin/board/gallery/img/twitter.png create mode 100644 theme/basic/skin/latest/basic/img/icon_lock.png create mode 100644 theme/basic/skin/latest/basic/img/icon_view.png create mode 100644 theme/basic/skin/latest/basic/img/more-btn.gif create mode 100644 theme/basic/skin/latest/basic/img/more_bg.gif create mode 100644 theme/basic/skin/latest/notice/latest.skin.php create mode 100644 theme/basic/skin/latest/notice/style.css create mode 100644 theme/basic/skin/latest/pic_basic/latest.skin.php create mode 100644 theme/basic/skin/latest/pic_basic/style.css create mode 100644 theme/basic/skin/outlogin/basic/img/info_edit.png diff --git a/adm/admin.head.php b/adm/admin.head.php index 90b07d8d7..9c35b557c 100644 --- a/adm/admin.head.php +++ b/adm/admin.head.php @@ -3,9 +3,23 @@ if (!defined('_GNUBOARD_')) exit; $begin_time = get_microtime(); +$files = glob(G5_ADMIN_PATH.'/css/admin_extend_*'); +if (is_array($files)) { + foreach ((array) $files as $k=>$css_file) { + + $fileinfo = pathinfo($css_file); + $ext = $fileinfo['extension']; + + if( $ext !== 'css' ) continue; + + $css_file = str_replace(G5_ADMIN_PATH, G5_ADMIN_URL, $css_file); + add_stylesheet('', $k); + } +} + include_once(G5_PATH.'/head.sub.php'); -function print_menu1($key, $no) +function print_menu1($key, $no='') { global $menu; @@ -14,11 +28,11 @@ function print_menu1($key, $no) return $str; } -function print_menu2($key, $no) +function print_menu2($key, $no='') { - global $menu, $auth_menu, $is_admin, $auth, $g5; + global $menu, $auth_menu, $is_admin, $auth, $g5, $sub_menu; - $str .= " -
- - + diff --git a/adm/sms_admin/history_list.php b/adm/sms_admin/history_list.php index bf6d1afd0..d3edc13e9 100644 --- a/adm/sms_admin/history_list.php +++ b/adm/sms_admin/history_list.php @@ -72,8 +72,8 @@ include_once(G5_ADMIN_PATH.'/admin.head.php'); ?> - - + + 예약":'';?> @@ -81,8 +81,8 @@ include_once(G5_ADMIN_PATH.'/admin.head.php'); - - 수정 + + 수정 diff --git a/adm/sms_admin/history_num.php b/adm/sms_admin/history_num.php index a2de1b2b3..78af3f36e 100644 --- a/adm/sms_admin/history_num.php +++ b/adm/sms_admin/history_num.php @@ -1,5 +1,5 @@ 예약":'';?> - - - 수정 + + + 수정 diff --git a/adm/sms_admin/history_view.php b/adm/sms_admin/history_view.php index c745b7058..2fd9d1b0c 100644 --- a/adm/sms_admin/history_view.php +++ b/adm/sms_admin/history_view.php @@ -84,12 +84,12 @@ function all_send()
- 전송건수 - 성공건수 - 실패건수 - 전송일시 - 예약일시 - 회신번호 + 전송건수 + 성공건수 + 실패건수 + 전송일시 + 예약일시 + 회신번호

전송내용

@@ -101,7 +101,7 @@ function all_send()

전송실패 문자 재전송 내역

-
+
@@ -133,8 +133,8 @@ function all_send() - @@ -230,16 +230,16 @@ function all_send() - - diff --git a/adm/sms_admin/member_update.php b/adm/sms_admin/member_update.php index 667919971..cf90a404e 100644 --- a/adm/sms_admin/member_update.php +++ b/adm/sms_admin/member_update.php @@ -26,8 +26,8 @@ include_once(G5_ADMIN_PATH.'/admin.head.php');
-
- +
+
diff --git a/adm/sms_admin/num_book.php b/adm/sms_admin/num_book.php index 39c1182e8..7bf189d2c 100644 --- a/adm/sms_admin/num_book.php +++ b/adm/sms_admin/num_book.php @@ -99,12 +99,12 @@ function no_hp_click(val)
- 회원정보 최근 업데이트 - 총 건수 - 회원 - 비회원 - 수신 - 거부 + 업데이트 + 건수 + 회원 + 비회원 + 수신 + 거부
@@ -133,9 +133,7 @@ function no_hp_click(val) - + @@ -191,23 +189,23 @@ function no_hp_click(val) -
- 수정 + + 수정
+ 결과코드 :
로그 :
메모 :
+ - 내역 + 내역 - 내역 + 내역
수신' : '거부'?> - 수정 - 보내기 - 내역 + + 수정 + 보내기 + 내역
- -
- - - - - +
+ + + + + + 번호추가
+
+ 건수 +
+
+
- -
-
- 건수 : +
+
@@ -131,7 +134,7 @@ function num_group_submit(f) - 보기 + 보기 @@ -166,7 +169,7 @@ function num_group_submit(f) - 보기 + 보기 @@ -174,10 +177,10 @@ function num_group_submit(f)
-
- - - +
+ + +
diff --git a/adm/sms_admin/sms_write.php b/adm/sms_admin/sms_write.php index 1016f1d5e..4654a3a6d 100644 --- a/adm/sms_admin/sms_write.php +++ b/adm/sms_admin/sms_write.php @@ -125,10 +125,10 @@ if ($config['cf_sms_use'] == 'icode') { // 아이코드 사용
- -
- - + +
+ +
@@ -182,9 +182,9 @@ if ($config['cf_sms_use'] == 'icode') { // 아이코드 사용

휴대폰번호 목록

diff --git a/adm/theme.php b/adm/theme.php index 57d4862f0..32eb294eb 100644 --- a/adm/theme.php +++ b/adm/theme.php @@ -26,8 +26,10 @@ include_once('./admin.head.php'); ?> +
+ 설치된 테마 -

설치된 테마 :

+
0) { ?>
    diff --git a/adm/theme_detail.php b/adm/theme_detail.php index 61d897acb..a0018f707 100644 --- a/adm/theme_detail.php +++ b/adm/theme_detail.php @@ -35,9 +35,10 @@ if($info['license_uri']) { ?>
    -
    -
    -

    +

    +
    +
    +

    @@ -52,8 +53,10 @@ if($info['license_uri']) {
    Version
    -

    +
    + 미리보기 +
    diff --git a/adm/thumbnail_file_delete.php b/adm/thumbnail_file_delete.php index 3b5ea0bd5..47f40c918 100644 --- a/adm/thumbnail_file_delete.php +++ b/adm/thumbnail_file_delete.php @@ -19,6 +19,10 @@ include_once('./admin.head.php'); $directory = array(); $dl = array('file', 'editor'); +if( defined('G5_YOUNGCART_VER') ){ + $dl[] = 'item'; +} + foreach($dl as $val) { if($handle = opendir(G5_DATA_PATH.'/'.$val)) { while(false !== ($entry = readdir($handle))) { diff --git a/adm/visit.sub.php b/adm/visit.sub.php index def2df342..742e8e7ae 100644 --- a/adm/visit.sub.php +++ b/adm/visit.sub.php @@ -12,7 +12,7 @@ $qstr = "fr_date=".$fr_date."&to_date=".$to_date; $query_string = $qstr ? '?'.$qstr : ''; ?> -
    +
    기간별검색 diff --git a/adm/visit_browser.php b/adm/visit_browser.php index aca685012..15cc0c297 100644 --- a/adm/visit_browser.php +++ b/adm/visit_browser.php @@ -78,7 +78,7 @@ while ($row=sql_fetch_array($result)) {
    - + diff --git a/adm/visit_date.php b/adm/visit_date.php index 29aab179e..967f4e8e9 100644 --- a/adm/visit_date.php +++ b/adm/visit_date.php @@ -66,7 +66,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++) {
    - + diff --git a/adm/visit_delete.php b/adm/visit_delete.php index 20811f647..99fe62e49 100644 --- a/adm/visit_delete.php +++ b/adm/visit_delete.php @@ -19,7 +19,7 @@ $now_year = (int)substr(G5_TIME_YMD, 0, 4); 접속자 로그를 삭제할 년도와 방법을 선택해주십시오.
- +
-
+
diff --git a/adm/visit_device.php b/adm/visit_device.php index 76aaffd39..df2362bcd 100644 --- a/adm/visit_device.php +++ b/adm/visit_device.php @@ -82,7 +82,7 @@ while ($row=sql_fetch_array($result)) {
- + diff --git a/adm/visit_domain.php b/adm/visit_domain.php index da7d2db55..348a87c63 100644 --- a/adm/visit_domain.php +++ b/adm/visit_domain.php @@ -86,7 +86,7 @@ while ($row=sql_fetch_array($result)) {
- + %">
- + %">
- + diff --git a/adm/visit_os.php b/adm/visit_os.php index 5e6c86022..183604ab5 100644 --- a/adm/visit_os.php +++ b/adm/visit_os.php @@ -82,7 +82,7 @@ while ($row=sql_fetch_array($result)) {
- + diff --git a/adm/visit_search.php b/adm/visit_search.php index cf61a8611..67e0f9188 100644 --- a/adm/visit_search.php +++ b/adm/visit_search.php @@ -104,7 +104,7 @@ $listall = '처음'; //페이지 처 ?> - + ' : ''; ?> diff --git a/adm/visit_week.php b/adm/visit_week.php index 1842feed8..5ebccac2d 100644 --- a/adm/visit_week.php +++ b/adm/visit_week.php @@ -62,7 +62,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++) {
- + diff --git a/adm/visit_year.php b/adm/visit_year.php index 4bd0f0d9f..1d42e1512 100644 --- a/adm/visit_year.php +++ b/adm/visit_year.php @@ -67,7 +67,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++) { - + diff --git a/adm/write_count.php b/adm/write_count.php index ddcab74bc..6729e6fd8 100644 --- a/adm/write_count.php +++ b/adm/write_count.php @@ -129,7 +129,7 @@ switch ($day) {
+
+ + +
+ -
+

+ 경로는 그누보드5 설치 루트를 기준으로 그누보드4의 config.php 파일의 상대경로입니다.
+ 예를 들어 그누보드4를 웹루트에 설치하셨고 그누보드5를 g5라는 하위 폴더에 설치하셨다면 입력하실 경로는 ../config.php 입니다. +

- -
- - -
- - -
-
- -
-
-
- -
-

- 이 프로그램은 그누보드5 설치 후 바로 실행하셔야만 합니다.
- 만약 그누보드5 사이트를 운영 중에 이 프로그램을 실행하시면 DB 데이터가 망실되거나 데이터의 오류가 발생할 수 있습니다.
- 또한 중복해서 실행하실 경우에도 DB 데이터의 오류가 발생할 수 있으니 반드시 한번만 실행해 주십시오. -

-

프로그램을 실행하시려면 그누보드4의 config.php 파일 경로를 입력하신 후 확인을 클릭해 주십시오.

- -
- -
- - - -
-
- -

- 경로는 그누보드5 설치 루트를 기준으로 그누보드4의 config.php 파일의 상대경로입니다.
- 예를 들어 그누보드4를 웹루트에 설치하셨고 그누보드5를 g5라는 하위 폴더에 설치하셨다면 입력하실 경로는 ../config.php 입니다. -

- -
- - - -
-
- - - -
- - -
-
<?php echo G5_VERSION ?>
-
-

- Copyright © 소유하신 도메인. All rights reserved.
- 상단으로 -

-
\ No newline at end of file diff --git a/g4_import_run.php b/g4_import_run.php index fa101017f..259832777 100644 --- a/g4_import_run.php +++ b/g4_import_run.php @@ -3,17 +3,9 @@ include_once('./_common.php'); ob_end_clean(); -include_once(G5_LIB_PATH.'/connect.lib.php'); -include_once(G5_LIB_PATH.'/outlogin.lib.php'); - set_time_limit ( 0 ); ini_set('memory_limit', '50M'); -$g5['title'] = '그누보드4 DB 데이터 이전'; -include_once(G5_PATH.'/'.G5_THEME_DIR.'/basic/head.sub.php'); - -echo ''; - if(empty($_POST)) alert('올바른 방법으로 이용해 주십시오.', G5_URL); @@ -41,6 +33,9 @@ if(!is_file($g4_config_file)) alert('입력하신 경로에 config.php 파일이 존재하지 않습니다.'); $is_euckr = false; + +$g5['title'] = '그누보드4 DB 데이터 이전'; +include_once(G5_PATH.'/head.php'); ?> - + } - + $sql_common .= $comma . " $key = '".addslashes($val)."' "; -
- - - - -
- + $comma = ','; + } -
+ sql_query(" INSERT INTO {$g5['board_table']} SET $sql_common "); - + // 게시판 테이블 생성 + $bo_table = $row['bo_table']; + $file = file(G5_ADMIN_PATH.'/sql_write.sql'); + $sql = implode($file, "\n"); + + $create_table = $g5['write_prefix'] . $bo_table; + + $source = array('/__TABLE_NAME__/', '/;/'); + $target = array($create_table, ''); + $sql = preg_replace($source, $target, $sql); + + // 게시글 복사 + if(sql_query($sql, FALSE)) { + $write_table = $g4['write_prefix'].$bo_table; + $columns2 = sql_field_names($create_table); + + $sql3 = " select * from $write_table "; + $result3 = sql_query($sql3); + + for($k=0; $row3=sql_fetch_array($result3); $k++) { + if($is_euckr) + $row3 = array_map('iconv_utf8', $row3); + + $comma3 = ''; + $sql_common3 = ''; + + foreach($row3 as $key=>$val) { + if(!in_array($key, $columns2)) + continue; + + $sql_common3 .= $comma3 . " $key = '".addslashes($val)."' "; + + $comma3 = ','; + } + + // 첨부파일개수 + $wr_id = $row3['wr_id']; + $sql4 = " select count(*) as cnt from {$g4['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' "; + $row4 = sql_fetch($sql4); + + $sql_common3 .= " , wr_file = '{$row4['cnt']}' "; + + sql_query(" INSERT INTO $create_table SET $sql_common3 "); + } + + echo '
  • '.str_replace(G5_TABLE_PREFIX.'write_', '', $create_table).' 게시글 복사
  • '; + } +} + +unset($columns); +unset($fiels); + +// 그외 테이블 복사 +$tables = array('board_file', 'board_new', 'board_good', 'mail', 'memo', 'group_member', 'auth', 'popular', 'poll', 'poll_etc', 'scrap'); + +foreach($tables as $table) { + $columns = sql_field_names($g5[$table.'_table']); + + $src_table = $g4[$table.'_table']; + $dst_table = $g5[$table.'_table']; + $sql = " select * from $src_table "; + $result = sql_query($sql); + for($i=0; $row=sql_fetch_array($result); $i++) { + if($is_euckr) + $row = array_map('iconv_utf8', $row); + + $comma = ''; + $sql_common = ''; + + foreach($row as $key=>$val) { + if(!in_array($key, $columns)) + continue; + + $sql_common .= $comma . " $key = '".addslashes($val)."' "; + + $comma = ','; + } + + $result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ", false); + + if(!$result2) + continue; + } + + echo '
  • '.$table.' table 복사
  • '.PHP_EOL; +} + +unset($columns); +unset($fiels); + +echo ''.PHP_EOL; + +echo '
    그누보드4 DB 데이터 이전 완료
    '.PHP_EOL; + +// 실행완료 세션에 기록 +set_session('tables_copied', 'done'); +?> - - -
    - - -
    -
    - -
    -
    -
    - -
    -
      - $val) { - if($key == 'mb_no') - continue; - - if(!in_array($key, $columns)) - continue; - - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['member_table']} SET $sql_common "); - } - - echo '
    1. member table 복사
    2. '.PHP_EOL; - unset($columns); - unset($fiels); - - // point table 복사 - $sql = " select * from {$g4['point_table']} "; - $result = sql_query($sql); - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - if($key == 'po_id') - continue; - - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['point_table']} SET $sql_common "); - } - echo '
    3. point table 복사
    4. '.PHP_EOL; - - // login table 복사 - $sql = " select * from {$g4['login_table']} "; - $result = sql_query($sql); - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - // 중복체크 - $sql2 = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$row['lo_ip']}' "; - $row2 = sql_fetch($sql2); - if($row2['cnt']) - continue; - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['login_table']} SET $sql_common "); - } - echo '
    5. login table 복사
    6. '.PHP_EOL; - - // visit table 복사 - $sql = " select * from {$g4['visit_table']} "; - $result = sql_query($sql); - - // g5_visit 테이블 초기화 - sql_query(" delete from {$g5['visit_table']} "); - - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - // 중복체크 - /* - $sql2 = " select count(*) as cnt from {$g5['visit_table']} where vi_ip = '{$row['vi_ip']}' and vi_date = '{$row['vi_date']}' "; - $row2 = sql_fetch($sql2); - if($row2['cnt']) - continue; - */ - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['visit_table']} SET $sql_common "); - } - echo '
    7. visit table 복사
    8. '.PHP_EOL; - - // visit sum table 복사 - $sql = " select * from {$g4['visit_sum_table']} "; - $result = sql_query($sql); - - // g5_visit_sub 테이블 초기화 - sql_query(" delete from {$g5['visit_sum_table']} "); - - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - // 중복체크 - /* - $sql2 = " select count(*) as cnt from {$g5['visit_sum_table']} where vs_date = '{$row['vs_date']}' "; - $row2 = sql_fetch($sql2); - if($row2['cnt']) - continue; - */ - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['visit_sum_table']} SET $sql_common "); - } - echo '
    9. visit sum table 복사
    10. '.PHP_EOL; - - // group table 복사 - $columns = sql_field_names($g5['group_table']); - - $sql = " select * from {$g4['group_table']} "; - $result = sql_query($sql); - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - // 중복체크 - $sql2 = " select count(*) as cnt from {$g5['group_table']} where gr_id = '{$row['gr_id']}' "; - $row2 = sql_fetch($sql2); - if($row2['cnt']) - continue; - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - if(!in_array($key, $columns)) - continue; - - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['group_table']} SET $sql_common "); - } - - echo '
    11. group table 복사
    12. '.PHP_EOL; - unset($columns); - unset($fiels); - - // board 복사 - $columns = sql_field_names($g5['board_table']); - - $sql = " select * from {$g4['board_table']} "; - $result = sql_query($sql); - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - // 중복체크 - $sql2 = " select count(*) as cnt from {$g5['board_table']} where bo_table = '{$row['bo_table']}' "; - $row2 = sql_fetch($sql2); - if($row2['cnt']) - continue; - - $comma = ''; - $sql_common = ''; - - // 모바일 스킨 디렉토리 - if( ! isset($row['bo_mobile_skin']) ){ - $row['bo_mobile_skin'] = 'basic'; - } - - // 모바일 제목 길이 - if( ! isset($row['bo_mobile_subject_len']) ){ - $row['bo_mobile_subject_len'] = '30'; - } - - // 모바일 페이지당 목록 수 - if( ! isset($row['bo_mobile_page_rows']) ){ - $row['bo_mobile_page_rows'] = '15'; - } - - // 갤러리 이미지 폭 ( 리스트 ) - if( ! isset($row['bo_gallery_width']) ){ - $row['bo_gallery_width'] = '174'; - } - - // 갤러리 이미지 높이 ( 리스트 ) - if( ! isset($row['bo_gallery_height']) ){ - $row['bo_gallery_height'] = '124'; - } - - // 모바일 갤러리 이미지 폭 ( 리스트 ) - if( ! isset($row['bo_mobile_gallery_width']) ){ - $row['bo_mobile_gallery_width'] = '125'; - } - - // 모바일 갤러리 이미지 높이 ( 리스트 ) - if( ! isset($row['bo_mobile_gallery_height']) ){ - $row['bo_mobile_gallery_height'] = '100'; - } - - foreach($row as $key=>$val) { - if(!in_array($key, $columns)) - continue; - - if($key === 'bo_notice'){ - $val = str_replace("\n", ",", $val); - - if( substr($val, -1) === ',' ){ - $val = substr($val, 0, -1); - } - } - - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - sql_query(" INSERT INTO {$g5['board_table']} SET $sql_common "); - - // 게시판 테이블 생성 - $bo_table = $row['bo_table']; - $file = file(G5_ADMIN_PATH.'/sql_write.sql'); - $sql = implode($file, "\n"); - - $create_table = $g5['write_prefix'] . $bo_table; - - $source = array('/__TABLE_NAME__/', '/;/'); - $target = array($create_table, ''); - $sql = preg_replace($source, $target, $sql); - - // 게시글 복사 - if(sql_query($sql, FALSE)) { - $write_table = $g4['write_prefix'].$bo_table; - $columns2 = sql_field_names($create_table); - - $sql3 = " select * from $write_table "; - $result3 = sql_query($sql3); - - for($k=0; $row3=sql_fetch_array($result3); $k++) { - if($is_euckr) - $row3 = array_map('iconv_utf8', $row3); - - $comma3 = ''; - $sql_common3 = ''; - - foreach($row3 as $key=>$val) { - if(!in_array($key, $columns2)) - continue; - - $sql_common3 .= $comma3 . " $key = '".addslashes($val)."' "; - - $comma3 = ','; - } - - // 첨부파일개수 - $wr_id = $row3['wr_id']; - $sql4 = " select count(*) as cnt from {$g4['board_file_table']} where bo_table = '$bo_table' and wr_id = '$wr_id' "; - $row4 = sql_fetch($sql4); - - $sql_common3 .= " , wr_file = '{$row4['cnt']}' "; - - sql_query(" INSERT INTO $create_table SET $sql_common3 "); - } - - echo '
    13. '.str_replace(G5_TABLE_PREFIX.'write_', '', $create_table).' 게시글 복사
    14. '; - } - } - - unset($columns); - unset($fiels); - - // 그외 테이블 복사 - $tables = array('board_file', 'board_new', 'board_good', 'mail', 'memo', 'group_member', 'auth', 'popular', 'poll', 'poll_etc', 'scrap'); - - foreach($tables as $table) { - $columns = sql_field_names($g5[$table.'_table']); - - $src_table = $g4[$table.'_table']; - $dst_table = $g5[$table.'_table']; - $sql = " select * from $src_table "; - $result = sql_query($sql); - for($i=0; $row=sql_fetch_array($result); $i++) { - if($is_euckr) - $row = array_map('iconv_utf8', $row); - - $comma = ''; - $sql_common = ''; - - foreach($row as $key=>$val) { - if(!in_array($key, $columns)) - continue; - - $sql_common .= $comma . " $key = '".addslashes($val)."' "; - - $comma = ','; - } - - $result2 = sql_query(" INSERT INTO $dst_table SET $sql_common ", false); - - if(!$result2) - continue; - } - - echo '
    15. '.$table.' table 복사
    16. '.PHP_EOL; - } - - unset($columns); - unset($fiels); - - echo '
    '.PHP_EOL; - - echo '
    그누보드4 DB 데이터 이전 완료
    '.PHP_EOL; - - // 실행완료 세션에 기록 - set_session('tables_copied', 'done'); - ?> -
    - -
    -
    - - - -
    - - -
    -
    <?php echo G5_VERSION ?>
    -
    -

    - Copyright © 소유하신 도메인. All rights reserved.
    - 상단으로 -

    -
    -
    - - \ No newline at end of file diff --git a/head.php b/head.php index ea90c579d..47bbaab67 100644 --- a/head.php +++ b/head.php @@ -31,134 +31,202 @@ include_once(G5_LIB_PATH.'/popular.lib.php'); include G5_BBS_PATH.'/newwin.inc.php'; // 팝업레이어 } ?> +
    + + +
    + +
    +
    + 사이트 내 전체검색 +
    + + + + + +
    -
    - 사이트 내 전체검색 -
    - - - - - -
    + - // 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요. - var cnt = 0; - for (var i=0; i 1) { - alert("빠른 검색을 위하여 검색어에 공백은 한개만 입력할 수 있습니다."); - f.stx.select(); - f.stx.focus(); - return false; - } - - return true; - } - -
    - -
    - - - - +
    + +
    - -
    - -
    - + + +
    -
    - - -
    +
    +
    -
    \ No newline at end of file +

    + diff --git a/head.sub.php b/head.sub.php index dc5664636..020900ea2 100644 --- a/head.sub.php +++ b/head.sub.php @@ -82,6 +82,8 @@ var g5_admin_url = ""; + + '.PHP_EOL; // overflow scroll 감지 @@ -90,7 +92,7 @@ if(!defined('G5_IS_ADMIN')) echo $config['cf_add_script']; ?> - +> Cgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ka}t%N=+=uFAB-e&w-_YfQeiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNaeds}Nub5mnOeO+x$bya0Wd0A;m zaZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsia8O`?zn`y7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k6E|}sGdCj>S7#SssJoguIU88Gnp!$p zn7O$)8XG#o^t$9Hm*%GCmB93-AoQBz)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)R% zoaRCGrr>sqF;2buK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk){OuE{r&U%*Uul{ zzkU7k`P0V_@87+B^ZM1x7tfzPee(Fx!w2{8-Mw@B*3BE&uU)-z`O?J;=g*xzbNbZD z6UUDoJ#zTa!2|pE?cK9`*UlZ=w{6|BdDF%X>({MavwGFa70Z_`U9x!5!Ugl^&7CuQ z*322xr%jzQdD6rQ{e8VX-Cdm>?QN|s%}tFB^>wv1)m4=h1nAc$w`R`@o}*+(NU2R;bEa6!9jrm{(inb-d>&_?ryFw&Q6XF_I9>5)>f7l=4PfQ z#zuw)`g*!L+FF_#>T0Sg%1Vj~@^Z2=(o&KV;$osA!a{-q{CvDT++3U->};$o%uI|7 z42nNlfFvV>4ybSh)t3w$atzEIED8k=9Gcjf86qkQ7CN``%R9N8Fj#o7iGhiU!5RQh Cn}zWJ literal 0 HcmV?d00001 diff --git a/img/btn_next.gif b/img/btn_next.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb714a33b9d4bfc35f39d34b184f4e2c9625c434 GIT binary patch literal 1169 zcmZ?wbhEHbWMN=uXkcWRKY#xJ|Nj;Lb4U0FD7Yk+Bm!w0`-+0ZCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^K}F`_YUXHS=;&f( z1<(a0N3l8S6q^qmz)Z-HxpVgsyL#pF zrHdENpF4Zz^r@34jvqUEVojbN~+qz}*ri~lcuUorj^{SOCmM>en zWbvYf3+B(8J7@N+nKPzOn>uCkq=^&y`+9r2yE;4C+ge+in;IMH>uPJNt12tX%Sua% ziwXi?qaq{1!$L!Xg8~Em{d|4Ay*xeK-CSLqog5wP z?QCtVtt>6f%}h;lT#wKO%<)l^lKl@t}^7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k11BeALjz|+S7#SssJoh3SeUywyBHf= zxSE(7S{NI`^t$9Hm*%GCmB93-AoLpH)C)=qxdlL*T~doO%TiO^it=+6z+Se>#OW3% zH=O1{^`_uv@OxBG5|NZ^*``6DO z-@kqR^7+%p5AWZ-ee?R&%NNg|J$>@{(ZdJ#@7=v~`_|1H*RNf@a{1E53+K6ZM9qnzcEzM1h4fS=kHPuy>73F26CB;RB1^IcoIoVm6 z8R==MDalER3Gs2UG0{A;Cd`0selzKHgrQ9`0_gF3wJl4)%7oHr7^_7UpKA zCdNjF2KsusI@(&A8tQ7QD#}WV3i5KYGSX6#65?W_BEmv~0{ncuJltHI9PDhYEX+)d q3=E1tS%4%XgAS;01l5-e96}7t94rPC6dIa2c;$373>X?37_0$NrGO#; literal 0 HcmV?d00001 diff --git a/img/btn_top.gif b/img/btn_top.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b5099d983b12272154772370bc26dc19cb73b5b GIT binary patch literal 1178 zcmZ?wbhEHbs)|yBtNcQetFn_VQ=?Nk^)#sNw%$$BS=C4WT$g}QL2Kep0RGSfuW&-nVFuUiK&^Hp^k!) zfuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Umxn8-kUVc%! zzM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VTY?Xj6g?J&i zz}FXUa9*(<*h6~B`MLTPi3R$GdItKrxgdXmRTq~8r6QbxRdsPlWkITbP-=00X;E@2 zP`NTpGcfG%TLe-Fbd8mNQ6?}_5_4SglS^|`^GZBjY?XjAdMTMHRxU;sj;6-umaaxF zF0N*VhL+}*rp_*|2F6Z?W=4iC<}fp`>2>O)SYT3dzsUfu(?ejQo=P;*9(P1?ONh z1`yp;U%Vogx=Kz!?xT9jFqn&MWJpQ`{4U#m9{rvI$+t)9jKYjf0{@vR*uV1}<@%-7-CyyUJd~pBX-8;8$-Mn%A+SMzUFI~KF z{@mF!r%#aDv3%LmC5sm= zTrhv$+&Qyn&73iP+SDnNCrzBt-`CsI-PPIA-qzaE+|<}mUsqdGT~%38URGLCTvS+) zpO>4Hot2r9o|c-DoRpXl9~T=F9Tgc79u^uB926Mf@8|2|?d9p=?&j*^?BwWRZ)a;` zZDna;Zf0s?Y-DJlucxb{t);1EF>tv&&SKd&Be*V x&c@2Z%*4pRp!kyoNHQ|$FaQCl~qj9_4}1^|Y{odEy< literal 0 HcmV?d00001 diff --git a/img/captcha2.png b/img/captcha2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef482a5649735066f387395dd2647c3a20217c7 GIT binary patch literal 4886 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 IM6N<$g3?DYq5uE@ literal 0 HcmV?d00001 diff --git a/img/close_btn.gif b/img/close_btn.gif new file mode 100644 index 0000000000000000000000000000000000000000..8007ef37c2511866d83b7c83989be7efadfee565 GIT binary patch literal 1209 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 literal 0 HcmV?d00001 diff --git a/img/gnb_bg.gif b/img/gnb_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e1d1aea30ba3fa5ce18e1a7215c16cf8893580b GIT binary patch literal 1169 zcmZ?wbhEHbWM^PuXkcUjg8%>jEB@z>@C{IKNi0bO(l+)L1&PVosU-?Ysp*+{wo31J z?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&Psj#ZZEyztRNmQuF&B-ga zs<2f`Ovz75wF0t1!um=IU?nBlwn~m52?day&iO^D3Z{C-y2%EHh6-k8dWI&ZW@d&u z3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{<>lpi<;HsX zMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5FD#PU%0_}#d=^5=_Tjq>Q^Kd=o{)8=;!8w`~_BBToROua0XV@#UYgisro^w#rdU0 z$*Dl)$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfT7+E-)8k<|X z8o9W*ni(2enp>JWySN${I~kf88M>Im%)qAC(a_Av(aFWg&D_Y+(9qS)!qnBx(bd_- z$kfTw$lSsLrq?sCxFj(zITdDaCeU7}UPHWkt(=Qe6HD@oLh|!-U@0IVBfliSI3vG6 z!8zDWK_fgfFD1XcSQ8XI5Z}6_7G;*DrnnX5=PH21*D4c>{YHjH#-^q&uFeLomLPvS znHjk`I+;0|Sh_j6T38w>LG`AP6K48A$LNC+2U22z2?0|ehzU>nKn^_fq~-y0Oc5|^ zF#iAd_s{QNKYx7x_Vvr>Pai+LfA{vy>sK#dJb(7|$>T>4AKbrp_s;EGH*Z|OcJ<2T zOBXMkKX>-b=~E|996xsS$l*f=5A5H!chBx!J9li~wsp(qO&d3?U$=J6>QyUOEMK;C z$>K!|7tEhGch2ltGiOYnHg(G6NfRgZ_x1L4cXf8Ox3#u3H#IiY*VWckS5;P&mz9*?xfYiVkztEs9eD=8|-%gM?}OG!$Ii;0Q|3keGF^YQX< rb8&L8v$3);GXV=3#h)xdl953NRNjC}9tI{3mL{=PH+Lj3GFSrub^Vm| literal 0 HcmV?d00001 diff --git a/img/gnb_bg2.gif b/img/gnb_bg2.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe636b93014581dea522c3b1071d7217575b760b GIT binary patch literal 49 zcmZ?wbhEHbWM^PuXkcJiz5U1k|Nj+#vM@3*Ff!;c00Bsbfr*2qNo>{49SMvK)&Nd1 B3|{~M literal 0 HcmV?d00001 diff --git a/img/logo.jpg b/img/logo.jpg deleted file mode 100644 index 763228e42641cbfcb836dafb497ad27102707434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3441 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 G`TqcJ!=MBJ literal 0 HcmV?d00001 diff --git a/img/m_logo.png b/img/m_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4556e845c600f680063324f57478d583df3c2f33 GIT binary patch literal 3100 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 literal 0 HcmV?d00001 diff --git a/img/mobile/btn_close.png b/img/mobile/btn_close.png new file mode 100644 index 0000000000000000000000000000000000000000..22f13faaec161bb79b92f35cab729acfd69d8bb5 GIT binary patch literal 3265 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 C4nrjX literal 0 HcmV?d00001 diff --git a/img/mobile/gnb_bg2.png b/img/mobile/gnb_bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..5828f41b7cd81d3958d5383073a5c8ba91328027 GIT binary patch literal 976 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 literal 0 HcmV?d00001 diff --git a/img/no_img.png b/img/no_img.png new file mode 100644 index 0000000000000000000000000000000000000000..96751aeb886da7969255a0a4bbe3d1a02b0629f5 GIT binary patch literal 991 zcmeAS@N?(olHy`uVBq!ia0vp^$AEYe2NRH-_)O_FkYX$ja(7}_cTVOdki(Mh=*OhOzddB?Y$}$U)v-up;s17~zh4;xCn@;^wRmU;A=<+0P}<9$vj_*ZX-v+4?rqzG{zGWw-yua8>5a<(H1Ds5aUx43s)}xTfAY7+^v;w)3l%LUBl=9=6Y`Fss}gf`IhYcT57aheckI< zp1O~vkJZep`1noHr9Tn=Dg?o z{ce4zQkeYkim(5wb=#l*{l3p^&w?2F>7S#gmHYj@ax^ou{NIPwKR7*kFUua=3_>LGNL|Hdyeh(HhO$o2@bM+D)_%Ibr*NU{ zSCcCrH_W@U;b~2LP<*CbUEp-HTBF+3PgwULh-_zOMa{y{0R_| fQ96G8_`$uZ?fVqzN){<#reyGR^>bP0l+XkK?NY&% literal 0 HcmV?d00001 diff --git a/img/no_profile.gif b/img/no_profile.gif new file mode 100644 index 0000000000000000000000000000000000000000..4494757bc79d868eeba095bdd0e6eea114137a24 GIT binary patch literal 1953 zcmb_cX;f2J5DtriB2)#f*s70U6)hxr*+?Q$A&FZ>DWGVzmXJIlh2+H~N~DVlh`8g9 z8#`#(#K@+JfDkAul}$wvM79tJI|5;ozM$Ct@c5&rbKZG(o0)IExifd|`ZW|P+X3Z( zQlU^yO-&II5#wWH??y+Po0}UO8xs=~i;9X=DpgHQO+R{$w6$q8nz50Q zn3$Nh*4B!Oipt8$jEsz^sHnk#fr5g9tgNim)YR9nUyqHBzU}LK`SN9XS(!qic=Yh$ zyRos>*48_S$YgT4yz2S$R<(LatIdD#AU8L+r@K2lJ3Bo+{ocKM3c0+lwzjjQqoJXp zuebNvvuE0YfvT#i?#|A3jV3cAV|Zvt-O^H4S{ff8-`&*}7Z=yj(J?wQ(xOszw6~W& zd4kZ+%*-4a9!^e9PD)DZY;P|qDbWrN=H%pbb$0f@efzYsvb40cs8A=>)zzr~PprmG zwmG{1OtyrLj1H@$LN>=2k^o+iH%~xEcgb_n0FO&Ydyt%Q&O!#{!&?_1g4_Z&xpM-1 zIaDrs)k?rYN|W-1d`Q9uq1|*WmWY8AC<3KzXhkRr^kVqquX?T0!gP;*K5qCGumAU2v7P6wFeIybg z4U6^n_s94XFtErQ3sR|6oewn6sA;2_);8bTo2;;qtgNCZ6I*BG^+|cqWrY z20^MlmBe7Oa0Dlij0c(alRiFWi=#4$I4X>kVSSPFjy=Ck%6ZYi8vOOIBC0H zAeOKN9B2}khv0s&C4APF#t=bl2`qAlVZX@=aPfg9u-FF{0t`1YVB^6PaAAM(GTrsO zXUl{{ynPUNjR@ug6Zxg_K7mhgB2XPkOa{x5MbYs_=-M;!L<);UrLb^JGWvrp_rK%} ziv)w!7017dWpWFtK;86X=_8Ae%>xOLju9cPp*Q|+Y;=<%_E4&z@FRl$Vu0`K#pdqld+R78NQB@*m{o=G<4v@7>ML z%FIZ=BfFh;D>WrKDe;e+HxlCGVq>DCA|tL}yL#nv_@#>%&YwGbChYX7lP8WJI~sZ< zI9`!mnSdpE@8c(FZy+V$hk9Y1W}=CO5) zyPNCxE}J(wZ~Sh<`gLp9u$T-d$JMJ=(j8XNs1$oLiAcbMI4s7__S@ylY?dzhX0bKe z3Rtvo!Pj5Sx19Io+&LEJvuDlx!pwAr$@FQ)MpLI48tChxP*y{R6OWax?yr0EQAXnj zQGr3hheM8p9zAya#K}{q!_J&NcmBe~OW~KVT)lQZA~GsECN?fU;l_1CQ^T953|%(r z%eF5xPC2?@rc5rg+maOm7$}tbo_Rs01%=8*#VDJSLX+YJ6(x*3OjY5oJd+xwLGn#Q zg}J-Z#6w}7GFO2!dn2dlmCH7y5EYBK%AFWnb0B_8kg#xdIvQtSg*C}q(mvni(6+OD znG;F__85Vd&ifAQg?L8ISo(Omr={8~{K!$9pW${{V{xicsj(U$v!hVPnGsfRgr@pR z??7V<_5fg0!F5}rk_LqOU=xF;hiPN#AEeH-6r8Z?J>huFSg&I1`F?86Ql6DokD9+Y%r&e&jU%5`66%%Ke7iY)GcGuB&)qwEQzOkJ z3r&@7fu^x*FR7cX`_(h9&87(HSCk1B>1&f-aD$x$k1e*s8`2sE>*q{!m_q^bvvKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001$NklZXP+^aLNtDfKhft@fOp6_^D8$%K zrTK#4Hg%5z6-LAMee&~yb4skS6XSg?up>$_Hn`!kB+Fj_YbKCJgB8I3|2-cA0M242 UB`Y^oGynhq07*qoM6N<$g4?ZVo&W#< literal 0 HcmV?d00001 diff --git a/img/sch_btn.png b/img/sch_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..94f98db8f486c86e4c73c8c457b1f6170d716d7e GIT binary patch literal 1234 zcmbVMO>Em_7L#sBtRF5+bZX+C#7^urYZBY(0!yiqNNf2KbK)0BR-RP@zdo6HJ|iG^BCa5F7?#5?nZ-4hg{lAu$fLXon#|%jYyH9I73# zY=1v~p6C7f-q&x8jtuV)JsBbhVt?+GQo!Q@|JfVF?-Sp>^E@7UTy@MXqN>}_Y)GVa zRE8jDY7?*kHGOva9vmcy&ZN-)x5Cf^tBZf=u~W@?i$Df zzM@t}Gj5W?o^FR=*7NxtVasVH3a5=>*cI)RX6ukHKnKm( z6?`7mzBU=>?(v3vAofOj(Khg*Xj2NR%$U$}b4rrJUn07pOA41r^U=7da*Cn~EGx!E zURG2lnqdWwRpM=p-MAu?&I+-NsLHa)vZ|2g8CI1US&pkwUXJZ>bC%<3Rt2{08rW`& zn|Lf&l5MED$Sxr?)vkci8gh|SLvGzLkJ6Z+W#yO~GZDfLGekEfU z`%F|-)7iKh!yY%|meY*F@q8?v&dOXOLAAL0|H&DRouU2W_)oF4w{Qje)1A`Ci=F0y z7Va1ux5m=32j37xMiq zJLKa1C7$hMyGgXCJaK*PRd6MA_l1Q=LGlK{9w2|~yg5K3MF2hb9v(`4{njtXJHW}s zYhNB6|Ko6J{b|zqY5m;8{xPc7S{uH8>2RuRF?l`_T>0S7rJt`Z@AKr5 hVCZu7y(G~QB)VQHjxXGLX~6%>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`VQgq(Y2ak+X5wmWXy|HY;cDsR=;-2X=3?w< zZtmy=)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GS--yV;41?Iqq(PxV@SoV zH#7e7HaYMdZQN;wAIt%as!12DfM%w_IstU>~K0G z^NoM;k|m$HjUt%VZEq_25!4wwSMu5&ofGOVx?+5FnUA*bnmF--UroXLs6YP|n2i*e f|5-lpZeV0MxH&F-`CIOAP_g3a>gTe~DWM4f6}_e& literal 0 HcmV?d00001 diff --git a/img/ts02.png b/img/ts02.png new file mode 100644 index 0000000000000000000000000000000000000000..ac688e2059a86f5f319a1a88b0785bb2096b5918 GIT binary patch literal 1252 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcX6ou_X6Rz(X5!*vXy|HYY3yj^YGUAGV(4b- zXyj%J)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GS(_>LZ)RX%jPP`E45_&F zX2wI_CIf-ii$CJs3z#DtPH^;H;61{5gtvtGE`z$jVFsfn^&B4HCv{? z^8$mSeED~;(@QdEok;gpJ}=7fU#=kSSA&XYN#1Ee&3^~ zVjd-HZ<%Sz4PN1@cIEeKI?6hd4Ngvo6P&qjF2kY3najG9k1Q_!_4KxlgmlV1&V*Z% z_iKMo(y7SH4*kLAQET;GNPsQUAYrxkqnE*K#S?Ako~-Q8xOKogDCHXC#{i>aVJYiP zUL;pHG<3VJ-|M=v{Z(qN>EVK<8f&F4RI}&tu6=s#3e%mF+lt*8i_UxQ=uXT$%b2O< zIKet!i0^5j{oTn7J|D|VwSS*rjal!>;GUpeIP1`SboU2}pDS^S{j`-~$%Q9~R&ixI{2@G$pyEia0wBC!lB(>Rn*aa+ literal 0 HcmV?d00001 diff --git a/img/ts03.png b/img/ts03.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae07f53f1ac77bf2fc45d1dbe6968d328c44228 GIT binary patch literal 1319 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDkcXy9bxW@+K*X5wmWXy|HYVeaDWVs2((v4~Pj*wm=R%;iu*SQ+p9GS#w{Bjbvb8obBo27*cWT z&5XCchYbYUguDNjFz;eaZ0Oj)C_TZ?!HO}J=@eUPb51~bq(V-B8HaF-@h*>P)q)!z z>o1&BGWA^MTJ`d8w>Mwj_kQw>Ue$@WuioMOWHbNQRnZEyqcJrmzK_KM4r_f7*Q}FJ z_#fZ7Fz4u*O6w2TI28`b>YkZ?xo0#Czv%O10$PcbfS=Ky2Bp3H|2!4a`fH z@vWM@sx&f5_;eC`i1CSJCY^)pm;Oj8=Do!<<*k6PdGn$=ecsyU>xQMq)~f4FPiY&) z3*5aR7qVnFFNbir%eOMAV4L2a;>yW}&K99F>hH_^k=e7DZHMT_bNd7ga@>0hl>VBZ zTI|l8c{8Yq?{&X4qgTQ9Q;T~a+PDAU{lEHYy70qm$_4VP{+GmG1mmE918&(VVAL}@5%BpTP<&60qRt2V< zDQj{Q_b}M2Gxi8NX?p$X6WY{PF`s42Mq^LW(`TK&gv)b3VA{c8WoPp8TfMsGJe5B$ gi%#2Lu49p4NVlwveqB}M04lmXUHx3vIVCg!0H7|>X8-^I literal 0 HcmV?d00001 diff --git a/index.php b/index.php index becc86997..045a07bb9 100644 --- a/index.php +++ b/index.php @@ -18,32 +18,49 @@ include_once(G5_PATH.'/head.php'); ?>

    최신글

    + +
    - 'mobile' "; -if(!$is_admin) - $sql .= " and a.bo_use_cert = '' "; -$sql .= " order by b.gr_order, a.bo_order "; -$result = sql_query($sql); -for ($i=0; $row=sql_fetch_array($result); $i++) { - if ($i%2==1) $lt_style = "margin-left:20px"; - else $lt_style = ""; -?> -
    + + 'mobile' "; + if(!$is_admin) + $sql .= " and a.bo_use_cert = '' "; + $sql .= " and a.bo_table not in ('notice', 'gallery') "; //공지사항과 갤러리 게시판은 제외 + $sql .= " order by b.gr_order, a.bo_order "; + $result = sql_query($sql); + for ($i=0; $row=sql_fetch_array($result); $i++) { + if ($i%2==1) $lt_style = "margin-left:2%"; + else $lt_style = ""; + ?> +
    - - + + + +
    + +
    + + + +
  • DB설정 완료
  • @@ -226,6 +322,7 @@ $dir_arr = array ( $data_path.'/file', $data_path.'/log', $data_path.'/member', + $data_path.'/member_image', $data_path.'/session', $data_path.'/content', $data_path.'/faq', @@ -285,6 +382,7 @@ fwrite($f, "\$g5['faq_table'] = G5_TABLE_PREFIX.'faq'; // 자주하시는 질문 fwrite($f, "\$g5['faq_master_table'] = G5_TABLE_PREFIX.'faq_master'; // 자주하시는 질문 마스터 테이블\n"); fwrite($f, "\$g5['new_win_table'] = G5_TABLE_PREFIX.'new_win'; // 새창 테이블\n"); fwrite($f, "\$g5['menu_table'] = G5_TABLE_PREFIX.'menu'; // 메뉴관리 테이블\n"); +fwrite($f, "\$g5['social_profile_table'] = G5_TABLE_PREFIX.'member_social_profiles'; // 소셜 로그인 테이블\n"); fwrite($f, "?>"); fclose($f); diff --git a/js/common.js b/js/common.js index 02ce71a7b..6a1bd75a1 100644 --- a/js/common.js +++ b/js/common.js @@ -540,7 +540,7 @@ $(function() { /** * 텍스트 리사이즈 **/ -function font_resize(id, rmv_class, add_class) +function font_resize(id, rmv_class, add_class, othis) { var $el = $("#"+id); @@ -548,6 +548,10 @@ function font_resize(id, rmv_class, add_class) set_cookie("ck_font_resize_rmv_class", rmv_class, 1, g5_cookie_domain); set_cookie("ck_font_resize_add_class", add_class, 1, g5_cookie_domain); + + if(typeof othis !== "undefined"){ + $(othis).addClass('select').siblings().removeClass('select'); + } } /** diff --git a/js/font-awesome/HELP-US-OUT.txt b/js/font-awesome/HELP-US-OUT.txt new file mode 100644 index 000000000..83d083dd7 --- /dev/null +++ b/js/font-awesome/HELP-US-OUT.txt @@ -0,0 +1,7 @@ +I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, +Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, +comprehensive icon sets or copy and paste your own. + +Please. Check it out. + +-Dave Gandy diff --git a/js/font-awesome/css/font-awesome.css b/js/font-awesome/css/font-awesome.css new file mode 100644 index 000000000..ee906a819 --- /dev/null +++ b/js/font-awesome/css/font-awesome.css @@ -0,0 +1,2337 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/js/font-awesome/css/font-awesome.min.css b/js/font-awesome/css/font-awesome.min.css new file mode 100644 index 000000000..540440ce8 --- /dev/null +++ b/js/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/js/font-awesome/fonts/FontAwesome.otf b/js/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 GIT binary patch literal 134808 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 literal 0 HcmV?d00001 diff --git a/js/font-awesome/fonts/fontawesome-webfont.eot b/js/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

    5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/font-awesome/fonts/fontawesome-webfont.ttf b/js/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 zcmd4434D~*)jxjkv&@#+*JQHIB(r2Agk&ZO5W=u;0Z~v85Ce*$fTDsRbs2>!AXP+E zv})s8XszXKwXa&S)7IKescosX*7l99R$G?_w7v?NC%^Bx&rC7|(E7f=|L^lpa-Zk9 z`?>d?d+s^so_oVMW6Z|VOlEVZPMtq{)pOIHX3~v25n48F@|3AkA5-983xDXec_W** zHg8HX#uvihecqa7Yb`$*a~)&Wy^KjmE?joS+JOO-B;B|Y@umw`Uvs>da>d0W;5qQ!4Qz zJxL+bkEIe8*8}j>Q>BETG1+ht-^o+}utRA<*p2#Ix&jHe=hB??wf3sZuV5(_`d1DH zgI+ncCI1s*Tuw6@6DFOB@-mE3%l-{_4z<*f9!g8!dcoz@f1eyoO9;V5yN|*Pk0}XYPFk z!g(%@Qka**;2iW8;b{R|Dg0FbU_E9^hd3H%a#EV5;HVvgVS_k;c*=`1YN*`2lhZm3 zqOTF2Pfz8N%lA<(eJUSDWevumUJ;MocT>zZ5W08%2JkP2szU{CP(((>LmzOmB>ZOpelu zIw>A5mu@gGU}>QA1RKFi-$*aQL_KL1GNuOxs0@)VEz%g?77_AY_{e55-&2X`IC z!*9krPH>;hA+4QUe(ZB_4Z@L!DgUN;`X-m}3;G6(Mf9flyest6ciunvokm)?oZmzF z@?{e2C{v;^ys6AQy_IN=B99>#C*fPn3ra`%a_!FN6aIXi^rn1ymrrZ@gw3bA$$zqb zqOxiHDSsYDDkGmZpD$nT@HfSi%fmt6l*S0Iupll)-&7{*yFioy4w3x%GVEpx@jWf@QO?itTs?#7)d3a-Ug&FLt_)FMnmOp5gGJy@z7B*(^RVW^e1dkQ zkMHw*dK%Ayu_({yrG6RifN!GjP=|nt${60CMrjDAK)0HZCYpnJB&8QF&0_TaoF9-S zu?&_mPAU0&@X=Qpc>I^~UdvKIk0usk``F{`3HAbeHC$CyQPtgN@2lwR?3>fKwC|F> zYx{2LyT9-8zVGxM?E7=y2YuRM`{9bijfXoA&pEvG@Fj<@J$%dI`wu^U__@Oe5C8e_ z2ZyyI_9GQXI*-gbvh>I$N3K0`%aQw!JbvW4BL|QC`N#+Vf_#9QLu~J`8d;ySFWi^v zo7>mjx3(|cx3jOOZ+~B=@8!PUzP`iku=8-}aMR(`;kk#q53fC(KD_gA&*A-tGlyS3 z+m)8@1~El#u3as^j;LR~)}{9CG~D_9MNw(aQga zKO~TeK}MY%7{tgG{veXj;r|am2GwFztR{2O|5v~?px`g+cB0=PQ}aFOx^-}vA95F5 zA7=4<%*Y5_FJ|j%P>qdnh_@iTs0Qv3Shg)-OV0=S+zU1vekc4cfZ>81?nWLD;PJf5 zm^TgA&zNr~$ZdkLfD=nH@)f_xSjk$*;M3uDgT;zqnj*X$`6@snD%LSpiMm2N;QAN~ z_kcBPVyrp@Qi?Q@UdCdRu{^&CvWYrt=QCD^e09&FD^N$nM_`>%e`5*`?~&bbh->n~ zJ(9*nTC4`EGNEOm%t%U8(?hP3%1b;hjQAV0Nc?8hxeG3 zaPKiTHp5uQTE@n~b#}l3uJMQ)kGfOHpF%kkn&43O#D#F5Fg6KwPr4VR9c4{M`YDK; z3jZ{uoAx?m(^2k>9gNLvXKdDEjCCQ+Y~-2K00%hd9AfOW{fx~8OmhL>=?SSyfsZaC!Gt-z(=`WU+-&Dfn0#_n3e*q()q-CYLpelpxsjC~b#-P^<1eJJmK#NGc1 zV_&XPb2-)pD^|e^5@<6_cHeE7RC;w7<*1(><1_>^E_ievcm0P?8kubdDQj%vyA=3 z3HKCZFYIRQXH9UujQt#S{T$`}0_FTN4TrE7KVs}9q&bK>55B|Lul6(cGRpdO1Kd`| zeq(~e`?pp&g#Y$EXw}*o`yJwccQ0eFbi*Ov?^iSS>U6j#82bal{s6dMn-2#V{#Xo$ zI$lq~{fx0cA?=^g&OdKq?7tBAUym`?3z*+P_+QpC_SX>Hn~c4gX6!Ab|67K!w~_Ac z_ZWKz;eUUXv46n53-{h3#@>IKu@7En?4O7`qA>R1M~r=hy#Got_OTNVaQ-*)f3gq` zWqlf9>?rCwhC2Ie;GSYEYlZ8Edx9~|1c$Hz6P6|~v_elnBK`=R&nMuzUuN8VKI0ZA z+#be@iW#>ma1S$XYhc_CQta5uxC`H|9>(1-GVW=IdlO`OC*!^vIHdJ2gzINKkYT)d z3*#jl84q5~c0(mMGIK+jJFO2k6NLvlqs#h}}L0klN#8)z2^A6*6 zU5q!Nj7Gdit%LiB@#bE}TbkhZGoIMXcoN~QNYfU9dezGK=;@4)al-X6K6WSL9b4dD zWqdqfOo0cRfI27sjPXfulka7G3er!7o3@tm>3GioJTpUZZ!$jX5aV4vjL$A+d`^n- zxp1e$e?~9k^CmMsKg9T%fbFbqIHX;GIu<72kYZMzEPZ`#55myqXbyss&PdzkU-kng%ZaGx-qUd{ORDE9`W-<*I${1)W@@_xo| z#P?RjZA0Ge?Tp_{4)ER51-F;+Tjw*r6ZPHZW&C#J-;MVj3S2+qccSdOkoNAY8NUbR z-HUYhnc!Y!{C@9;sxqIIma{CrC z{*4;OzZrsik@3eKWBglt8Gju9$G0;6ZPfp5`1hya;Q!vUjQ{6qsNQ=S2c6;1ApV)% zjDJ4@_b}tnn&43HfiA|MBZsgbpsdVv#(xMHfA~D(KUU!0Wc>La#(y%O@fT{~-ede{ zR>pr0_Y2hXOT@kS3F8L=^RH0;%c~jx_4$nd=5@w@I~NXdzuUt2E2!)DYvKACfAu5A zUwe%4KcdXn;r@iOKr8s4QQm)bG5$uH@xLJ7o5hU3g}A?UF#a~+dV4S9??m7ZG5+_} zjQ<05{sZ6d0><|ea8JQ~#Q6It>z^jLhZ*lv;9g|>Fxqwm@O+4TAHKu*zfkVS4R9I8 z{~NIVcQ50g0KQKVb`<_&>lp7xn*Q?{2i@S=9gJ(JgXqP;%S_@4CSmVFk{g($tYngU z2omdDCYcd#!MC-SNwz*FIf|L&M40PMCV4uTQXRtTUT0GMZYDM0-H5Up z-(yk}+^8)~YEHrRGpXe%CMDJ}DT(-2W~^` zjDf-D4fq2U%2=tnQ*LW*>*Q@NeQ=U48Xk01IuzADy1ym0rit^WHK~^SwU449k4??k zJX|$cO-EBU&+R{a*)XQ6t~;?kuP)y%}DA(=%g4sNM$ z8a1k^e#^m%NS4_=9;HTdn_VW0>ap!zx91UcR50pxM}wo(NA}d;)_n~5mQGZt41J8L zZE5Hkn1U{CRFZ(Oxk3tb${0}UQ~92RJG;|T-PJKt>+QV$(z%hy+)Jz~xmNJS#48TFsM{-?LHd-bxvg|X{pRq&u74~nC4i>i16LEAiprfpGA zYjeP(qECX_9cOW$*W=U1YvVDXKItrNcS$?{_zh2o=MDaGyL^>DsNJtwjW%Do^}YA3 z3HS=f@249Yh{jnme5ZRV>tcdeh+=o(;eXg_-64c@tJ&As=oIrFZ& z*Gx&Lr>wdAF8POg_#5blBAP!&nm-O!$wspA>@;>RyOdqWZe?F%--gC9nTXZ%DnmK< z`p0sh@aOosD-jbIoje0ec`&&fWsK?xPdf*L)Qp(MwKKIOtB+EDn(3w-9Ns9O~i z7MwnG8-?RZlv&XIJZUK*;)r!1@Bh4bnRO*JmgwqANa8v4EvHWvBQYYGT?tN4>BRz1 zf1&5N7@@!g89ym5LO{@=9>;Y8=^ExA9{+#aKfFGPwby8wn)db@o}%Z_x0EjQWsmb6 zA9uX(vr-n8$U~x9dhk~VKeI!h^3Z2NXu;>n6BHB%6e2u2VJ!ZykHWv-t19}tU-Yz$ zHXl2#_m7V&O!q(RtK+(Yads868*Wm*!~EzJtW!oq)kw}`iSZl@lNpanZn&u|+px84 zZrN7t&ayK4;4x_@`Q;;XMO4{VelhvW%CtX7w;>J6y=346)vfGe)zJBQ9o$eAhcOPy zjwRa6$CvN-8qHjFi;}h1wAb{Kcnn{;+ITEi`fCUk^_(hJ&q1Z=yo*jRs<94E#yX67 zRj)s)V&gd0VVZGcLALQ|_Lp<4{XEBIF-*yma#;%V*m^xSuqeG?H-7=M0Cq%%W9`2Oe>Ov)OMv8yKrI^mZ$ql{A!!3mw_27Y zE=V#cA@HopguAWPAMhKDb__-Z_(TN7;*A`XxrMefxoz4{Seu)$%$=sPf{vT@Pf_T`RlrC#CPDl$#FnvU|VBC$0(E>+3EG z&3xsml}L_UE3bNGX6T~2dV6S%_M9{`E9kgHPa+9mas{tj$S<&{z?nRzH2b4~4m^Wc zVF+o4`w9BO_!IohZO_=<;=$8j?7KUk(S5llK6wfy9m$GsiN5*e{q(ZS6vU4l6&{s5 zXrJJ@giK>(m%yKhRT;egW||O~pGJ&`7b8-QIchNCms)}88aL8Jh{cIp1uu`FMo!ZP z1fne;+5#%k3SM7Kqe|`%w1JI=6hJJrog4j?5Iq!j=b=0AJS5%ev_9?eR!_H>OLzLM z_U#QLoi=0npY1+gHmde37Kgp)+PKl=nC>pM|EJCAEPBRXQZvb74&LUs*^WCT5Q%L-{O+y zQKgd4Cek)Gjy~OLwb&xJT2>V%wrprI+4aOtWs*;<9pGE>o8u|RvPtYh;P$XlhlqF_ z77X`$AlrH?NJj1CJdEBA8;q*JG-T8nm>hL#38U9ZYO3UTNWdO3rg-pEe5d= zw3Xi@nV)1`P%F?Y4s9yVPgPYT9d#3SLD{*L0U{ z;TtVh?Wb0Lp4MH{o@L6GvhJE=Y2u>{DI_hMtZgl~^3m3#ZUrkn?-5E3A!m!Z>183- zpkovvg1$mQawcNKoQ*tW=gtZqYGqCd)D#K;$p113iB1uE#USvWT}QQ7kM7!al-C^P zmmk!=rY+UJcJLry#vkO%BuM>pb)46x!{DkRYY7wGNK$v=np_sv7nfHZO_=eyqLSK zA6ebf$Bo&P&CR_C*7^|cA>zl^hJ7z0?xu#wFzN=D8 zxm(>@s?z1E;|!Py8HuyHM}_W5*Ff>m5U0Jhy?txDx{jjLGNXs}(CVxgu9Q4tPgE+Hm z*9ll7bz80456xzta(cX+@W!t7xTWR-OgnG_>YM~t&_#5vzC`Mp5aKlXsbO7O0HKAC z2iQF2_|0d6y4$Pu5P-bfZMRzac(Yl{IQgfa0V>u;BJRL(o0$1wD7WOWjKwP)2-6y$ zlPcRhIyDY>{PFLvIr0!VoCe;c_}dp>U-X z`pii$Ju=g+Wy~f|R7yuZZjYAv4AYJT}Ct-OfF$ZUBa> zOiKl0HSvn=+j1=4%5yD}dAq5^vgI~n>UcXZJGkl671v`D74kC?HVsgEVUZNBihyAm zQUE~mz%na<71JU=u_51}DT92@IPPX)0eiDweVeDWmD&fpw12L;-h=5Gq?za0HtmUJ zH@-8qs1E38^OR8g5Q^sI0)J}rOyKu$&o1s=bpx{TURBaQ(!P7i1=oA@B4P>8wu#ek zxZHJqz$1GoJ3_W^(*tZqZsoJlG*66B5j&D6kx@x^m6KxfD?_tCIgCRc?kD~(zmgCm zLGhpE_YBio<-2T9r;^qM0TO{u_N5@cU&P7is8f9-5vh4~t?zMqUEV!d@P{Y)%APE6 zC@k9|i%k6)6t2uJRQQTHt`P5Lgg%h*Fr*Hst8>_$J{ZI{mNBjN$^2t?KP8*6_xXu5xx8ufMp5R?P(R-t`{n6c{!t+*z zh;|Ek#vYp1VLf;GZf>~uUhU}a<>y*ErioacK@F{%7aq0y(Ytu@OPe;mq`jlJD+HtQ zUhr^&Zeh93@tZASEHr)@YqdxFu69(=VFRCysjBoGqZ!U;W1gn5D$myEAmK|$NsF>Z zoV+w>31}eE0iAN9QAY2O+;g%zc>2t#7Dq5vTvb&}E*5lHrkrj!I1b0=@+&c(qJcmok6 zSZAuQ496j<&@a6?K6ox1vRks+RqYD< zT9On_zdVf}IStW^#13*WV8wHQWz$L;0cm)|JDbh|f~*LV8N$;2oL|R99**#AT1smo zob=4dB_WB-D3}~I!ATFHzdW%WacH{qwv5Go2WzQzwRrv)ZajWMp{13T_u;Rz^V-VF z@#62k@#FD#t@v9ye*A%@ODWm-@oM_$_3Cy1BS+(+ujzNF@8a7?`$B^{iX2A-2_nA? zfi2=05XV^;D_2G}Up$eFW|Ofb^zuE)bWHkXR4Jm!Sz0O?)x6QD^kOufR`*v0=|sS?#*ZCvvr^VkV!zhLF3}FHf%+=#@ae1Qq<4~Y1EGYK$Ib1 zg!s~&&u27X&4Ks^(L3%}Npx!_-A)We=0v#yzv03fzxKZ8iV6KIX5U&?>^E?%iIUZ4 z2sD^vRg%kOU!B5@iV{&gBNc9vB)i{Wa@joIa2#4=oAl|-xqj_~$h33%zgk*UWGUV# zf3>{T#2buK?AZH?)h>10N)#VHvOV}%c|wR%HF|pgm8k`*=1l5P8ttZ1Ly@=C5?d9s z)R>B@43V`}=0??4tp?Y}Ox0$SH)yg(!|@V7H^}C-GyAXHFva04omv@`|LCuFRM2`U zxCM>41^p9U3cR>W>`h`{m^VWSL0SNz27{ske7TN1dTpM|P6Hn!^*}+fr>rJ*+GQN{ ziKp9Zda}CgnbNv#9^^&{MChK=E|Wr}tk?tP#Q?iZ%$2k;Eo9~}^tmv?g~PW^C$`N)|awe=5m{Xqd!M=ST?2~(mWjdOsXK#yVMN(qP6`q#tg+rQexf|*BeIU)a z^WuJyPR4WVsATp2E{*y77*kZ9 zEB{*SRHSVGm8ThtES`9!v{E``H)^3d+TG_?{b|eytE1cy^QbPxY3KFTWh&NZi`C?O z;777FMti@+U+IRl7B{=SCc93nKp`>jeW38muw(9T3AqySM#x@9G|p?N;IiNy(KN7? zMz3hIS5SaXrGqD(NIR0ZMnJT%%^~}|cG(Ez!3#)*o{{QjPUIVFOQ%dccgC0*WnAJW zL*1k^HZ5-%bN;%C&2vpW`=;dB5iu4SR48yF$;K8{SY`7mu6c z@q{10W=zwHuav3wid&;5tHCUlUgeVf&>wKuUfEVuUsS%XZ2RPvr>;HI=<(RACmN-M zR8(DJD^lePC9|rUrFgR?>hO#VkFo8}zA@jt{ERalZl$!LP4-GTT`1w}QNUcvuEFRv z`)NyzRG!e-04~~Y1DK>70lGq9rD4J}>V(1*UxcCtBUmyi-Y8Q$NOTQ&VfJIlBRI;7 z5Dr6QNIl|8NTfO>Jf|kZVh7n>hL^)`@3r1BaPIKjxrLrjf8A>RDaI{wYlKG)6-7R~ zsZQ}Kk{T~BDVLo#Zm@cc<&x{X<~boVS5(zfvp1s3RbASf6EKpp>+IFV9s`#Yx#+I& zMz5zL9IUgaqrnG*_=_qm|JBcwfl`bw=c=uU^R>Nm%k4_TeDjy|&K2eKwx!u8 z9&lbdJ?yJ@)>!NgE_vN8+*}$8+Uxk4EBNje>!s2_nOCtE+ie>zl!9&!!I)?QPMD&P zm$5sb#Le|%L<#tZbz%~WWv&yUZH6NLl>OK#CBOp{e~$&fuqQd03DJfLrcWa}IvMu* zy;z7L)WxyINd`m}Fh=l&6EWmHUGLkeP{6Vc;Xq->+AS`1T*b9>SJ#<2Cf!N<)o7Ms z!Gj)CiteiY$f@_OT4C*IODVyil4|R)+8nCf&tw%_BEv!z3RSN|pG(k%hYGrU_Ec^& zNRpzS-nJ*v_QHeHPu}Iub>F_}G1*vdGR~ZSdaG(JEwXM{Df;~AK)j(<_O<)u)`qw* zQduoY)s+$7NdtxaGEAo-cGn7Z5yN#ApXWD1&-5uowpb7bR54QcA7kWG@gybdQQa&cxCKxup2Av3_#{04Z^J#@M&a}P$M<((Zx{A8 z!Ue=%xTpWEzWzKIhsO_xc?e$$ai{S63-$76>gtB?9usV&`qp=Kn*GE5C&Tx`^uyza zw{^ImGi-hkYkP`^0r5vgoSL$EjuxaoKBh2L;dk#~x%`TgefEDi7^(~cmE)UEw*l#i+5f-;!v^P%ZowUbhH*3Av)CifOJX7KS6#d|_83fqJ#8VL=h2KMI zGYTbGm=Q=0lfc{$IDTn;IxIgLZ(Z?)#!mln$0r3A(um zzBIGw6?zmj=H#CkvRoT+C{T=_kfQQ!%8T;loQ5;tH?lZ%M{aG+z75&bhJE`sNSO`$ z`0eget1V7SqB@uA;kQ4UkJ-235xxryG*uzwDPikrWOi1;8WASslh$U4RY{JHgggsL zMaZ|PI2Ise8dMEpuPnW`XYJY^W$n>4PxVOPCO#DnHKfqe+Y7BA6(=QJn}un5MkM7S zkL?&Gvnj|DI!4xt6BV*t)Zv0YV-+(%$}7QcBMZ01jlLEiPk>A3;M^g%K=cNDF6d!7 z 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

    '); + // store a namspace reference to .bx-viewport + slider.viewport = el.parent(); + // add a loading div to display while images are loading + slider.loader = $('
    '); + slider.viewport.prepend(slider.loader); + // set el to a massive width, to hold any needed slides + // also strip any margin and padding from el + el.css({ + width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto', + position: 'relative' + }); + el.state = slider.settings.auto ? 'start' : 'stop'; + // if using CSS, add the easing property + if(slider.usingCSS && slider.settings.easing){ + el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing); + // if not using CSS and no easing value was supplied, use the default JS animation easing (swing) + }else if(!slider.settings.easing){ + slider.settings.easing = 'swing'; + } + var slidesShowing = getNumberSlidesShowing(); + // make modifications to the viewport (.bx-viewport) + slider.viewport.css({ + width: '100%', + overflow: 'hidden', + position: 'relative' + }); + slider.viewport.parent().css({ + maxWidth: getViewportMaxWidth() + }); + // make modification to the wrapper (.bx-wrapper) + if(!slider.settings.pager) { + slider.viewport.parent().css({ + margin: '0 auto 0px' + }); + } + // apply css to all slider children + slider.children.css({ + 'float': slider.settings.mode == 'horizontal' ? 'left' : 'none', + listStyle: 'none', + position: 'relative' + }); + // apply the calculated width after the float is applied to prevent scrollbar interference + slider.children.css('width', getSlideWidth()); + // if slideMargin is supplied, add the css + if(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin); + if(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin); + // if "fade" mode, add positioning and z-index CSS + if(slider.settings.mode == 'fade'){ + slider.children.css({ + position: 'absolute', + zIndex: 0, + display: 'none' + }); + // prepare the z-index on the showing element + slider.children.eq(slider.settings.startSlide).css({zIndex: 50, display: 'block'}); + } + // create an element to contain all slider controls (pager, start / stop, etc) + slider.controls.el = $('
    '); + // if captions are requested, add them + if(slider.settings.captions) appendCaptions(); + // check if startSlide is last slide + slider.active.last = slider.settings.startSlide == getPagerQty() - 1; + // if video is true, set up the fitVids plugin + if(slider.settings.video) el.fitVids(); + // set the default preload selector (visible) + var preloadSelector = slider.children.eq(slider.settings.startSlide); + if (slider.settings.preloadImages == "all") preloadSelector = slider.children; + // only check for control addition if not in "ticker" mode + if(!slider.settings.ticker){ + // if pager is requested, add it + if(slider.settings.pager) appendPager(); + // if controls are requested, add them + if(slider.settings.controls) appendControls(); + // if auto is true, and auto controls are requested, add them + if(slider.settings.auto && slider.settings.autoControls) appendControlsAuto(); + // if any control option is requested, add the controls wrapper + if(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el); + // if ticker mode, do not allow a pager + }else{ + slider.settings.pager = false; + } + // preload all images, then perform final DOM / CSS modifications that depend on images being loaded + loadElements(preloadSelector, start); + } + + var loadElements = function(selector, callback){ + var total = selector.find('img, iframe').length; + if (total == 0){ + callback(); + return; + } + var count = 0; + selector.find('img, iframe').each(function(){ + $(this).one('load', function() { + if(++count == total) callback(); + }).each(function() { + if(this.complete) $(this).load(); + }); + }); + } + + /** + * Start the slider + */ + var start = function(){ + // if infinite loop, prepare additional slides + if(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){ + var slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides; + var sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone'); + var slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone'); + el.append(sliceAppend).prepend(slicePrepend); + } + // remove the loading DOM element + slider.loader.remove(); + // set the left / top position of "el" + setSlidePosition(); + // if "vertical" mode, always use adaptiveHeight to prevent odd behavior + if (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true; + // set the viewport height + slider.viewport.height(getViewportHeight()); + // make sure everything is positioned just right (same as a window resize) + el.redrawSlider(); + // onSliderLoad callback + slider.settings.onSliderLoad(slider.active.index); + // slider has been fully initialized + slider.initialized = true; + // bind the resize call to the window + if (slider.settings.responsive) $(window).bind('resize', resizeWindow); + // if auto is true, start the show + if (slider.settings.auto && slider.settings.autoStart) initAuto(); + // if ticker is true, start the ticker + if (slider.settings.ticker) initTicker(); + // if pager is requested, make the appropriate pager link active + if (slider.settings.pager) updatePagerActive(slider.settings.startSlide); + // check for any updates to the controls (like hideControlOnEnd updates) + if (slider.settings.controls) updateDirectionControls(); + // if touchEnabled is true, setup the touch events + if (slider.settings.touchEnabled && !slider.settings.ticker) initTouch(); + } + + /** + * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value + */ + var getViewportHeight = function(){ + var height = 0; + // first determine which children (slides) should be used in our height calculation + var children = $(); + // if mode is not "vertical" and adaptiveHeight is false, include all children + if(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){ + children = slider.children; + }else{ + // if not carousel, return the single active child + if(!slider.carousel){ + children = slider.children.eq(slider.active.index); + // if carousel, return a slice of children + }else{ + // get the individual slide index + var currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy(); + // add the current slide to the children + children = slider.children.eq(currentIndex); + // cycle through the remaining "showing" slides + for (i = 1; i <= slider.settings.maxSlides - 1; i++){ + // if looped back to the start + if(currentIndex + i >= slider.children.length){ + children = children.add(slider.children.eq(i - 1)); + }else{ + children = children.add(slider.children.eq(currentIndex + i)); + } + } + } + } + // if "vertical" mode, calculate the sum of the heights of the children + if(slider.settings.mode == 'vertical'){ + children.each(function(index) { + height += $(this).outerHeight(); + }); + // add user-supplied margins + if(slider.settings.slideMargin > 0){ + height += slider.settings.slideMargin * (slider.settings.minSlides - 1); + } + // if not "vertical" mode, calculate the max height of the children + }else{ + height = Math.max.apply(Math, children.map(function(){ + return $(this).outerHeight(false); + }).get()); + } + return height; + } + + /** + * Returns the calculated width to be used for the outer wrapper / viewport + */ + var getViewportMaxWidth = function(){ + var width = '100%'; + if(slider.settings.slideWidth > 0){ + if(slider.settings.mode == 'horizontal'){ + width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin); + }else{ + width = slider.settings.slideWidth; + } + } + return width; + } + + /** + * Returns the calculated width to be applied to each slide + */ + var getSlideWidth = function(){ + // start with any user-supplied slide width + var newElWidth = slider.settings.slideWidth; + // get the current viewport width + var wrapWidth = slider.viewport.width(); + // if slide width was not supplied, or is larger than the viewport use the viewport width + if(slider.settings.slideWidth == 0 || + (slider.settings.slideWidth > wrapWidth && !slider.carousel) || + slider.settings.mode == 'vertical'){ + newElWidth = wrapWidth; + // if carousel, use the thresholds to determine the width + }else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){ + if(wrapWidth > slider.maxThreshold){ + // newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides; + }else if(wrapWidth < slider.minThreshold){ + newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides; + } + } + return newElWidth; + } + + /** + * Returns the number of slides currently visible in the viewport (includes partially visible slides) + */ + var getNumberSlidesShowing = function(){ + var slidesShowing = 1; + if(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){ + // if viewport is smaller than minThreshold, return minSlides + if(slider.viewport.width() < slider.minThreshold){ + slidesShowing = slider.settings.minSlides; + // if viewport is larger than minThreshold, return maxSlides + }else if(slider.viewport.width() > slider.maxThreshold){ + slidesShowing = slider.settings.maxSlides; + // if viewport is between min / max thresholds, divide viewport width by first child width + }else{ + var childWidth = slider.children.first().width(); + slidesShowing = Math.floor(slider.viewport.width() / childWidth); + } + // if "vertical" mode, slides showing will always be minSlides + }else if(slider.settings.mode == 'vertical'){ + slidesShowing = slider.settings.minSlides; + } + return slidesShowing; + } + + /** + * Returns the number of pages (one full viewport of slides is one "page") + */ + var getPagerQty = function(){ + var pagerQty = 0; + // if moveSlides is specified by the user + if(slider.settings.moveSlides > 0){ + if(slider.settings.infiniteLoop){ + pagerQty = slider.children.length / getMoveBy(); + }else{ + // use a while loop to determine pages + var breakPoint = 0; + var counter = 0 + // when breakpoint goes above children length, counter is the number of pages + while (breakPoint < slider.children.length){ + ++pagerQty; + breakPoint = counter + getNumberSlidesShowing(); + counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing(); + } + } + // if moveSlides is 0 (auto) divide children length by sides showing, then round up + }else{ + pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing()); + } + return pagerQty; + } + + /** + * Returns the number of indivual slides by which to shift the slider + */ + var getMoveBy = function(){ + // if moveSlides was set by the user and moveSlides is less than number of slides showing + if(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){ + return slider.settings.moveSlides; + } + // if moveSlides is 0 (auto) + return getNumberSlidesShowing(); + } + + /** + * Sets the slider's (el) left or top position + */ + var setSlidePosition = function(){ + // if last slide, not infinite loop, and number of children is larger than specified maxSlides + if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){ + if (slider.settings.mode == 'horizontal'){ + // get the last child's position + var lastChild = slider.children.last(); + var position = lastChild.position(); + // set the left position + setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.width())), 'reset', 0); + }else if(slider.settings.mode == 'vertical'){ + // get the last showing index's position + var lastShowingIndex = slider.children.length - slider.settings.minSlides; + var position = slider.children.eq(lastShowingIndex).position(); + // set the top position + setPositionProperty(-position.top, 'reset', 0); + } + // if not last slide + }else{ + // get the position of the first showing slide + var position = slider.children.eq(slider.active.index * getMoveBy()).position(); + // check for last slide + if (slider.active.index == getPagerQty() - 1) slider.active.last = true; + // set the repective position + if (position != undefined){ + if (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0); + else if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0); + } + } + } + + /** + * Sets the el's animating property position (which in turn will sometimes animate el). + * If using CSS, sets the transform property. If not using CSS, sets the top / left property. + * + * @param value (int) + * - the animating property's value + * + * @param type (string) 'slider', 'reset', 'ticker' + * - the type of instance for which the function is being + * + * @param duration (int) + * - the amount of time (in ms) the transition should occupy + * + * @param params (array) optional + * - an optional parameter containing any variables that need to be passed in + */ + var setPositionProperty = function(value, type, duration, params){ + // use CSS transform + if(slider.usingCSS){ + // determine the translate3d value + var propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)'; + // add the CSS transition-duration + el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's'); + if(type == 'slide'){ + // set the property value + el.css(slider.animProp, propValue); + // bind a callback method - executes when CSS transition completes + el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){ + // unbind the callback + el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd'); + updateAfterSlideTransition(); + }); + }else if(type == 'reset'){ + el.css(slider.animProp, propValue); + }else if(type == 'ticker'){ + // make the transition use 'linear' + el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear'); + el.css(slider.animProp, propValue); + // bind a callback method - executes when CSS transition completes + el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){ + // unbind the callback + el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd'); + // reset the position + setPositionProperty(params['resetValue'], 'reset', 0); + // start the loop again + tickerLoop(); + }); + } + // use JS animate + }else{ + var animateObj = {}; + animateObj[slider.animProp] = value; + if(type == 'slide'){ + el.animate(animateObj, duration, slider.settings.easing, function(){ + updateAfterSlideTransition(); + }); + }else if(type == 'reset'){ + el.css(slider.animProp, value) + }else if(type == 'ticker'){ + el.animate(animateObj, speed, 'linear', function(){ + setPositionProperty(params['resetValue'], 'reset', 0); + // run the recursive loop after animation + tickerLoop(); + }); + } + } + } + + /** + * Populates the pager with proper amount of pages + */ + var populatePager = function(){ + var pagerHtml = ''; + var pagerQty = getPagerQty(); + // loop through each pager item + for(var i=0; i < pagerQty; i++){ + var linkContent = ''; + // if a buildPager function is supplied, use it to get pager link value, else use index + 1 + if(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){ + linkContent = slider.settings.buildPager(i); + slider.pagerEl.addClass('bx-custom-pager'); + }else{ + linkContent = i + 1; + slider.pagerEl.addClass('bx-default-pager'); + } + // var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1; + // add the markup to the string + pagerHtml += ''; + }; + // populate the pager element with pager links + slider.pagerEl.html(pagerHtml); + } + + /** + * Appends the pager to the controls element + */ + var appendPager = function(){ + if(!slider.settings.pagerCustom){ + // create the pager DOM element + slider.pagerEl = $('
    '); + // if a pager selector was supplied, populate it with the pager + if(slider.settings.pagerSelector){ + $(slider.settings.pagerSelector).html(slider.pagerEl); + // if no pager selector was supplied, add it after the wrapper + }else{ + slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl); + } + // populate the pager + populatePager(); + }else{ + slider.pagerEl = $(slider.settings.pagerCustom); + } + // assign the pager click binding + slider.pagerEl.on('click', 'a', clickPagerBind); + } + + /** + * Appends prev / next controls to the controls element + */ + var appendControls = function(){ + slider.controls.next = $('' + slider.settings.nextText + ''); + slider.controls.prev = $('' + slider.settings.prevText + ''); + // bind click actions to the controls + slider.controls.next.bind('click', clickNextBind); + slider.controls.prev.bind('click', clickPrevBind); + // if nextSlector was supplied, populate it + if(slider.settings.nextSelector){ + $(slider.settings.nextSelector).append(slider.controls.next); + } + // if prevSlector was supplied, populate it + if(slider.settings.prevSelector){ + $(slider.settings.prevSelector).append(slider.controls.prev); + } + // if no custom selectors were supplied + if(!slider.settings.nextSelector && !slider.settings.prevSelector){ + // add the controls to the DOM + slider.controls.directionEl = $('
    '); + // add the control elements to the directionEl + slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next); + // slider.viewport.append(slider.controls.directionEl); + slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl); + } + } + + /** + * Appends start / stop auto controls to the controls element + */ + var appendControlsAuto = function(){ + slider.controls.start = $(''); + slider.controls.stop = $(''); + // add the controls to the DOM + slider.controls.autoEl = $('
    '); + // bind click actions to the controls + slider.controls.autoEl.delegate('.bx-start', 'click', clickStartBind); + slider.controls.autoEl.delegate('.bx-stop', 'click', clickStopBind); + // if autoControlsCombine, insert only the "start" control + if(slider.settings.autoControlsCombine){ + slider.controls.autoEl.append(slider.controls.start); + // if autoControlsCombine is false, insert both controls + }else{ + slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop); + } + // if auto controls selector was supplied, populate it with the controls + if(slider.settings.autoControlsSelector){ + $(slider.settings.autoControlsSelector).html(slider.controls.autoEl); + // if auto controls selector was not supplied, add it after the wrapper + }else{ + slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl); + } + + // update the auto controls + updateAutoControls(slider.settings.autoStart ? 'stop' : 'start'); + } + + /** + * Appends image captions to the DOM + */ + var appendCaptions = function(){ + // cycle through each child + slider.children.each(function(index){ + // get the image title attribute + var title = $(this).find('img:first').attr('title'); + // append the caption + if (title != undefined && ('' + title).length) { + $(this).append('
    ' + title + '
    '); + } + }); + } + + /** + * Click next binding + * + * @param e (event) + * - DOM event object + */ + var clickNextBind = function(e){ + // if auto show is running, stop it + if (slider.settings.auto) el.stopAuto(); + el.goToNextSlide(); + e.preventDefault(); + } + + /** + * Click prev binding + * + * @param e (event) + * - DOM event object + */ + var clickPrevBind = function(e){ + // if auto show is running, stop it + if (slider.settings.auto) el.stopAuto(); + el.goToPrevSlide(); + e.preventDefault(); + } + + /** + * Click start binding + * + * @param e (event) + * - DOM event object + */ + var clickStartBind = function(e){ + el.startAuto(); + e.preventDefault(); + } + + /** + * Click stop binding + * + * @param e (event) + * - DOM event object + */ + var clickStopBind = function(e){ + el.stopAuto(); + e.preventDefault(); + } + + /** + * Click pager binding + * + * @param e (event) + * - DOM event object + */ + var clickPagerBind = function(e){ + // if auto show is running, stop it + if (slider.settings.auto) el.stopAuto(); + var pagerLink = $(e.currentTarget); + if(pagerLink.attr('data-slide-index') !== undefined){ + var pagerIndex = parseInt(pagerLink.attr('data-slide-index')); + // if clicked pager link is not active, continue with the goToSlide call + if(pagerIndex != slider.active.index) el.goToSlide(pagerIndex); + e.preventDefault(); + } + } + + /** + * Updates the pager links with an active class + * + * @param slideIndex (int) + * - index of slide to make active + */ + var updatePagerActive = function(slideIndex){ + // if "short" pager type + var len = slider.children.length; // nb of children + if(slider.settings.pagerType == 'short'){ + if(slider.settings.maxSlides > 1) { + len = Math.ceil(slider.children.length/slider.settings.maxSlides); + } + slider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len); + return; + } + // remove all pager active classes + slider.pagerEl.find('a').removeClass('active'); + // apply the active class for all pagers + slider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); }); + } + + /** + * Performs needed actions after a slide transition + */ + var updateAfterSlideTransition = function(){ + // if infinte loop is true + if(slider.settings.infiniteLoop){ + var position = ''; + // first slide + if(slider.active.index == 0){ + // set the new position + position = slider.children.eq(0).position(); + // carousel, last slide + }else if(slider.active.index == getPagerQty() - 1 && slider.carousel){ + position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position(); + // last slide + }else if(slider.active.index == slider.children.length - 1){ + position = slider.children.eq(slider.children.length - 1).position(); + } + if (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0);; } + else if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0);; } + } + // declare that the transition is complete + slider.working = false; + // onSlideAfter callback + slider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index); + } + + /** + * Updates the auto controls state (either active, or combined switch) + * + * @param state (string) "start", "stop" + * - the new state of the auto show + */ + var updateAutoControls = function(state){ + + el.trigger("updateautocontrols", state); + + // if autoControlsCombine is true, replace the current control with the new state + if(slider.settings.autoControlsCombine){ + slider.controls.autoEl.html(slider.controls[state]); + // if autoControlsCombine is false, apply the "active" class to the appropriate control + }else{ + slider.controls.autoEl.find('a').removeClass('active'); + slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active'); + } + } + + /** + * Updates the direction controls (checks if either should be hidden) + */ + var updateDirectionControls = function(){ + if(getPagerQty() == 1){ + slider.controls.prev.addClass('disabled'); + slider.controls.next.addClass('disabled'); + }else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){ + // if first slide + if (slider.active.index == 0){ + slider.controls.prev.addClass('disabled'); + slider.controls.next.removeClass('disabled'); + // if last slide + }else if(slider.active.index == getPagerQty() - 1){ + slider.controls.next.addClass('disabled'); + slider.controls.prev.removeClass('disabled'); + // if any slide in the middle + }else{ + slider.controls.prev.removeClass('disabled'); + slider.controls.next.removeClass('disabled'); + } + } + } + + /** + * Initialzes the auto process + */ + var initAuto = function(){ + // if autoDelay was supplied, launch the auto show using a setTimeout() call + if(slider.settings.autoDelay > 0){ + var timeout = setTimeout(el.startAuto, slider.settings.autoDelay); + // if autoDelay was not supplied, start the auto show normally + }else{ + el.startAuto(); + } + // if autoHover is requested + if(slider.settings.autoHover){ + // on el hover + el.hover(function(){ + // if the auto show is currently playing (has an active interval) + if(slider.interval){ + // stop the auto show and pass true agument which will prevent control update + el.stopAuto(true); + // create a new autoPaused value which will be used by the relative "mouseout" event + slider.autoPaused = true; + } + }, function(){ + // if the autoPaused value was created be the prior "mouseover" event + if(slider.autoPaused){ + // start the auto show and pass true agument which will prevent control update + el.startAuto(true); + // reset the autoPaused value + slider.autoPaused = null; + } + }); + } + } + + /** + * Initialzes the ticker process + */ + var initTicker = function(){ + var startPosition = 0; + // if autoDirection is "next", append a clone of the entire slider + if(slider.settings.autoDirection == 'next'){ + el.append(slider.children.clone().addClass('bx-clone')); + // if autoDirection is "prev", prepend a clone of the entire slider, and set the left position + }else{ + el.prepend(slider.children.clone().addClass('bx-clone')); + var position = slider.children.first().position(); + startPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top; + } + setPositionProperty(startPosition, 'reset', 0); + // do not allow controls in ticker mode + slider.settings.pager = false; + slider.settings.controls = false; + slider.settings.autoControls = false; + // if autoHover is requested + if(slider.settings.tickerHover && !slider.usingCSS){ + // on el hover + slider.viewport.hover(function(){ + el.stop(); + }, function(){ + // calculate the total width of children (used to calculate the speed ratio) + var totalDimens = 0; + slider.children.each(function(index){ + totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true); + }); + // calculate the speed ratio (used to determine the new speed to finish the paused animation) + var ratio = slider.settings.speed / totalDimens; + // determine which property to use + var property = slider.settings.mode == 'horizontal' ? 'left' : 'top'; + // calculate the new speed + var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property))))); + tickerLoop(newSpeed); + }); + } + // start the ticker loop + tickerLoop(); + } + + /** + * Runs a continuous loop, news ticker-style + */ + var tickerLoop = function(resumeSpeed){ + speed = resumeSpeed ? resumeSpeed : slider.settings.speed; + var position = {left: 0, top: 0}; + var reset = {left: 0, top: 0}; + // if "next" animate left position to last child, then reset left to 0 + if(slider.settings.autoDirection == 'next'){ + position = el.find('.bx-clone').first().position(); + // if "prev" animate left position to 0, then reset left to first non-clone child + }else{ + reset = slider.children.first().position(); + } + var animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top; + var resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top; + var params = {resetValue: resetValue}; + setPositionProperty(animateProperty, 'ticker', speed, params); + } + + /** + * Initializes touch events + */ + var initTouch = function(){ + // initialize object to contain all touch values + slider.touch = { + start: {x: 0, y: 0}, + end: {x: 0, y: 0} + } + slider.viewport.bind(slider.START_EV, onTouchStart); + slider.children.bind('click', onClick_check); + } + + var isScrolling; + /** + * Event handler for "touchstart" + * + * @param e (event) + * - DOM event object + */ + var onTouchStart = function(e){ + // used for testing first move event + isScrolling = undefined; + if(slider.working){ + e.preventDefault(); + }else{ + // record the original position when touch starts + slider.touch.originalPos = el.position(); + var orig = e.originalEvent; + var evt = slider.settings.SUPPORTS_TOUCH ? orig.changedTouches[0] : e; + // record the starting touch x, y coordinates + slider.touch.start.x = evt.pageX; + slider.touch.start.y = evt.pageY; + // bind a "touchmove" event to the viewport + slider.viewport.bind(slider.MOVE_EV, onTouchMove); + // bind a "touchend" event to the viewport + slider.viewport.bind(slider.END_EV, onTouchEnd); + } + } + + var onClick_check = function(e){ + if(slider.working){ + e.preventDefault(); + } + } + /** + * Event handler for "touchmove" + * + * @param e (event) + * - DOM event object + */ + var onTouchMove = function(e){ + var orig = e.originalEvent; + var evt = slider.settings.SUPPORTS_TOUCH ? orig.changedTouches[0] : e; + // if scrolling on y axis, do not prevent default + var xMovement = Math.abs(evt.pageX - slider.touch.start.x); + var yMovement = Math.abs(evt.pageY - slider.touch.start.y); + + // determine if scrolling test has run - one time test + if ( typeof isScrolling == 'undefined') { + isScrolling = !!( isScrolling || xMovement < yMovement ); + } + if (!isScrolling && slider.settings.mode != 'vertical') { + // x axis swipe + if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){ + e.preventDefault(); + // y axis swipe + }else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){ + e.preventDefault(); + } + if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){ + var value = 0; + // if horizontal, drag along x axis + if(slider.settings.mode == 'horizontal'){ + var change = evt.pageX - slider.touch.start.x; + value = slider.touch.originalPos.left + change; + // if vertical, drag along y axis + }else{ + var change = evt.pageY - slider.touch.start.y; + value = slider.touch.originalPos.top + change; + } + setPositionProperty(value, 'reset', 0); + } + } + } + + /** + * Event handler for "touchend" + * + * @param e (event) + * - DOM event object + */ + var onTouchEnd = function(e){ + slider.viewport.unbind(slider.MOVE_EV, onTouchMove); + var orig = e.originalEvent; + var evt = slider.settings.SUPPORTS_TOUCH ? orig.changedTouches[0] : e; + var value = 0; + // record end x, y positions + slider.touch.end.x = evt.pageX; + slider.touch.end.y = evt.pageY; + // if fade mode, check if absolute x distance clears the threshold + if(slider.settings.mode == 'fade'){ + var distance = Math.abs(slider.touch.start.x - slider.touch.end.x); + if(distance >= slider.settings.swipeThreshold){ + slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide(); + el.stopAuto(); + } + // not fade mode + }else{ + var distance = 0; + // calculate distance and el's animate property + if(slider.settings.mode == 'horizontal'){ + distance = slider.touch.end.x - slider.touch.start.x; + value = slider.touch.originalPos.left; + }else{ + distance = slider.touch.end.y - slider.touch.start.y; + value = slider.touch.originalPos.top; + } + // if not infinite loop and first / last slide, do not attempt a slide transition + if(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){ + setPositionProperty(value, 'reset', 200); + }else{ + // check if distance clears threshold + if(Math.abs(distance) >= slider.settings.swipeThreshold){ + distance < 0 ? el.goToNextSlide() : el.goToPrevSlide(); + el.stopAuto(); + }else{ + // el.animate(property, 200); + setPositionProperty(value, 'reset', 200); + } + } + } + slider.viewport.unbind(slider.END_EV, onTouchEnd); + } + + /** + * Window resize event callback + */ + var resizeWindow = function(e){ + // get the new window dimens (again, thank you IE) + var windowWidthNew = $(window).width(); + var windowHeightNew = $(window).height(); + // make sure that it is a true window resize + // *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements + // are resized. Can you just die already?* + if(windowWidth != windowWidthNew || windowHeight != windowHeightNew){ + // set the new window dimens + windowWidth = windowWidthNew; + windowHeight = windowHeightNew; + // update all dynamic elements + el.redrawSlider(); + } + } + + /** + * =================================================================================== + * = PUBLIC FUNCTIONS + * =================================================================================== + */ + + /** + * Performs slide transition to the specified slide + * + * @param slideIndex (int) + * - the destination slide's index (zero-based) + * + * @param direction (string) + * - INTERNAL USE ONLY - the direction of travel ("prev" / "next") + */ + el.goToSlide = function(slideIndex, direction, workignore){ + // if plugin is currently in motion, ignore request + if( slider.active.index == slideIndex ) return; + if( !workignore && slider.working ) return; + + // declare that plugin is in motion + slider.working = true; + // store the old index + slider.oldIndex = slider.active.index; + // if slideIndex is less than zero, set active index to last child (this happens during infinite loop) + if(slideIndex < 0){ + slider.active.index = getPagerQty() - 1; + // if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop) + }else if(slideIndex >= getPagerQty()){ + slider.active.index = 0; + // set active index to requested slide + }else{ + slider.active.index = slideIndex; + } + // onSlideBefore, onSlideNext, onSlidePrev callbacks + slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index); + if(direction == 'next'){ + slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index); + }else if(direction == 'prev'){ + slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index); + } + // check if last slide + slider.active.last = slider.active.index >= getPagerQty() - 1; + // update the pager with active class + if(slider.settings.pager) updatePagerActive(slider.active.index); + // // check for direction control update + if(slider.settings.controls) updateDirectionControls(); + // if slider is set to mode: "fade" + if(slider.settings.mode == 'fade'){ + // if adaptiveHeight is true and next height is different from current height, animate to the new height + if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){ + slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed); + } + // fade out the visible child and reset its z-index value + slider.children.filter(':visible').stop( true, true ).fadeOut(slider.settings.speed).css({zIndex: 0}); + // fade in the newly requested slide + slider.children.eq(slider.active.index).css('zIndex', 51).stop( true, true ).fadeIn(slider.settings.speed, function(){ + $(this).css('zIndex', 50); + updateAfterSlideTransition(); + }); + // slider mode is not "fade" + }else{ + // if adaptiveHeight is true and next height is different from current height, animate to the new height + if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){ + slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed); + } + var moveBy = 0; + var position = {left: 0, top: 0}; + // if carousel and not infinite loop + if(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){ + if(slider.settings.mode == 'horizontal'){ + // get the last child position + var lastChild = slider.children.eq(slider.children.length - 1); + position = lastChild.position(); + // calculate the position of the last slide + moveBy = slider.viewport.width() - lastChild.outerWidth(); + }else{ + // get last showing index position + var lastShowingIndex = slider.children.length - slider.settings.minSlides; + position = slider.children.eq(lastShowingIndex).position(); + } + // horizontal carousel, going previous while on first slide (infiniteLoop mode) + }else if(slider.carousel && slider.active.last && direction == 'prev'){ + // get the last child position + var eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides); + var lastChild = el.children('.bx-clone').eq(eq); + position = lastChild.position(); + // if infinite loop and "Next" is clicked on the last slide + }else if(direction == 'next' && slider.active.index == 0){ + // get the last clone position + position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position(); + slider.active.last = false; + // normal non-zero requests + }else if(slideIndex >= 0){ + var requestEl = slideIndex * getMoveBy(); + position = slider.children.eq(requestEl).position(); + } + + /* If the position doesn't exist + * (e.g. if you destroy the slider on a next click), + * it doesn't throw an error. + */ + if ("undefined" !== typeof(position)) { + var value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top; + // plugin values to be animated + setPositionProperty(value, 'slide', slider.settings.speed); + } + } + } + + /** + * Transitions to the next slide in the show + */ + el.goToNextSlide = function(){ + // if infiniteLoop is false and last page is showing, disregard call + if (!slider.settings.infiniteLoop && slider.active.last) return; + var pagerIndex = parseInt(slider.active.index) + 1; + el.goToSlide(pagerIndex, 'next'); + } + + /** + * Transitions to the prev slide in the show + */ + el.goToPrevSlide = function(){ + // if infiniteLoop is false and last page is showing, disregard call + if (!slider.settings.infiniteLoop && slider.active.index == 0) return; + var pagerIndex = parseInt(slider.active.index) - 1; + el.goToSlide(pagerIndex, 'prev'); + } + + /** + * Starts the auto show + * + * @param preventControlUpdate (boolean) + * - if true, auto controls state will not be updated + */ + el.startAuto = function(preventControlUpdate){ + // if an interval already exists, disregard call + if(slider.interval) return; + // create an interval + slider.interval = setInterval(function(){ + slider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide(); + }, el.pause); + + // if auto controls are displayed and preventControlUpdate is not true + if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop'); + } + + /** + * Stops the auto show + * + * @param preventControlUpdate (boolean) + * - if true, auto controls state will not be updated + */ + el.stopAuto = function(preventControlUpdate){ + // if no interval exists, disregard call + if(!slider.interval) return; + // clear the interval + el.clearTimer(); + slider.interval = null; + // if auto controls are displayed and preventControlUpdate is not true + if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start'); + } + + /** + * clear + */ + el.clearTimer = function(){ + clearInterval(slider.interval); + } + + /** + * Returns current slide index (zero-based) + */ + el.getCurrentSlide = function(){ + return slider.active.index; + } + + /** + * Returns number of slides in show + */ + el.getSlideCount = function(){ + return slider.children.length; + } + + /** + * Update all dynamic slider elements + */ + el.redrawSlider = function(){ + // resize all children in ratio to new screen size + slider.children.add(el.find('.bx-clone')).outerWidth(getSlideWidth()); + // adjust the height + slider.viewport.css('height', getViewportHeight()); + // update the slide position + if(!slider.settings.ticker) setSlidePosition(); + // if active.last was true before the screen resize, we want + // to keep it last no matter what screen size we end on + if (slider.active.last) slider.active.index = getPagerQty() - 1; + // if the active index (page) no longer exists due to the resize, simply set the index as last + if (slider.active.index >= getPagerQty()) slider.active.last = true; + // if a pager is being displayed and a custom pager is not being used, update it + if(slider.settings.pager && !slider.settings.pagerCustom){ + populatePager(); + updatePagerActive(slider.active.index); + } + } + + /** + * Destroy the current instance of the slider (revert everything back to original state) + */ + el.destroySlider = function(){ + // don't do anything if slider has already been destroyed + if(!slider.initialized) return; + slider.initialized = false; + $('.bx-clone', this).remove(); + slider.children.each(function() { + $(this).data("origStyle") != undefined ? $(this).attr("style", $(this).data("origStyle")) : $(this).removeAttr('style'); + }); + $(this).data("origStyle") != undefined ? this.attr("style", $(this).data("origStyle")) : $(this).removeAttr('style'); + $(this).unwrap().unwrap(); + if(slider.controls.el) slider.controls.el.remove(); + if(slider.controls.next) slider.controls.next.remove(); + if(slider.controls.prev) slider.controls.prev.remove(); + if(slider.pagerEl) slider.pagerEl.remove(); + $('.bx-caption', this).remove(); + if(slider.controls.autoEl) slider.controls.autoEl.remove(); + el.clearTimer(); + //remove self reference in data + $(this).removeData('bxSlider'); + if(slider.settings.responsive) $(window).unbind('resize', resizeWindow); + } + + /** + * Reload the slider (revert all DOM changes, and re-initialize) + */ + el.reloadSlider = function(settings){ + if (settings != undefined) options = settings; + el.destroySlider(); + init(); + //store reference to self in order to access public functions later + $(el).data('bxSlider', this); + } + + init(); + + $(el).data('bxSlider', this); + + // returns the current jQuery object + return this; + } + +})(jQuery); \ No newline at end of file diff --git a/js/placeholders.min.js b/js/placeholders.min.js new file mode 100644 index 000000000..c8740839e --- /dev/null +++ b/js/placeholders.min.js @@ -0,0 +1,25 @@ +/* Placeholders.js v4.0.1 */ +/*! + * The MIT License + * + * Copyright (c) 2012 James Allardice + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +!function(a){"use strict";function b(){}function c(){try{return document.activeElement}catch(a){}}function d(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return!0;return!1}function e(a,b,c){return a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent?a.attachEvent("on"+b,c):void 0}function f(a,b){var c;a.createTextRange?(c=a.createTextRange(),c.move("character",b),c.select()):a.selectionStart&&(a.focus(),a.setSelectionRange(b,b))}function g(a,b){try{return a.type=b,!0}catch(c){return!1}}function h(a,b){if(a&&a.getAttribute(B))b(a);else for(var c,d=a?a.getElementsByTagName("input"):N,e=a?a.getElementsByTagName("textarea"):O,f=d?d.length:0,g=e?e.length:0,h=f+g,i=0;h>i;i++)c=f>i?d[i]:e[i-f],b(c)}function i(a){h(a,k)}function j(a){h(a,l)}function k(a,b){var c=!!b&&a.value!==b,d=a.value===a.getAttribute(B);if((c||d)&&"true"===a.getAttribute(C)){a.removeAttribute(C),a.value=a.value.replace(a.getAttribute(B),""),a.className=a.className.replace(A,"");var e=a.getAttribute(I);parseInt(e,10)>=0&&(a.setAttribute("maxLength",e),a.removeAttribute(I));var f=a.getAttribute(D);return f&&(a.type=f),!0}return!1}function l(a){var b=a.getAttribute(B);if(""===a.value&&b){a.setAttribute(C,"true"),a.value=b,a.className+=" "+z;var c=a.getAttribute(I);c||(a.setAttribute(I,a.maxLength),a.removeAttribute("maxLength"));var d=a.getAttribute(D);return d?a.type="text":"password"===a.type&&g(a,"text")&&a.setAttribute(D,"password"),!0}return!1}function m(a){return function(){P&&a.value===a.getAttribute(B)&&"true"===a.getAttribute(C)?f(a,0):k(a)}}function n(a){return function(){l(a)}}function o(a){return function(){i(a)}}function p(a){return function(b){return v=a.value,"true"===a.getAttribute(C)&&v===a.getAttribute(B)&&d(x,b.keyCode)?(b.preventDefault&&b.preventDefault(),!1):void 0}}function q(a){return function(){k(a,v),""===a.value&&(a.blur(),f(a,0))}}function r(a){return function(){a===c()&&a.value===a.getAttribute(B)&&"true"===a.getAttribute(C)&&f(a,0)}}function s(a){var b=a.form;b&&"string"==typeof b&&(b=document.getElementById(b),b.getAttribute(E)||(e(b,"submit",o(b)),b.setAttribute(E,"true"))),e(a,"focus",m(a)),e(a,"blur",n(a)),P&&(e(a,"keydown",p(a)),e(a,"keyup",q(a)),e(a,"click",r(a))),a.setAttribute(F,"true"),a.setAttribute(B,T),(P||a!==c())&&l(a)}var t=document.createElement("input"),u=void 0!==t.placeholder;if(a.Placeholders={nativeSupport:u,disable:u?b:i,enable:u?b:j},!u){var v,w=["text","search","url","tel","email","password","number","textarea"],x=[27,33,34,35,36,37,38,39,40,8,46],y="#ccc",z="placeholdersjs",A=new RegExp("(?:^|\\s)"+z+"(?!\\S)"),B="data-placeholder-value",C="data-placeholder-active",D="data-placeholder-type",E="data-placeholder-submit",F="data-placeholder-bound",G="data-placeholder-focus",H="data-placeholder-live",I="data-placeholder-maxlength",J=100,K=document.getElementsByTagName("head")[0],L=document.documentElement,M=a.Placeholders,N=document.getElementsByTagName("input"),O=document.getElementsByTagName("textarea"),P="false"===L.getAttribute(G),Q="false"!==L.getAttribute(H),R=document.createElement("style");R.type="text/css";var S=document.createTextNode("."+z+" {color:"+y+";}");R.styleSheet?R.styleSheet.cssText=S.nodeValue:R.appendChild(S),K.insertBefore(R,K.firstChild);for(var T,U,V=0,W=N.length+O.length;W>V;V++)U=Va;a++)U=a max) { + max = num; + } + } + + return max; + } + + /** + * Returns a scrollbar width + * @private + * @returns {Number} + */ + function getScrollbarWidth() { + if ($(document).height() <= $(window).height()) { + return 0; + } + + var outer = document.createElement('div'); + var inner = document.createElement('div'); + var widthNoScroll; + var widthWithScroll; + + outer.style.visibility = 'hidden'; + outer.style.width = '100px'; + document.body.appendChild(outer); + + widthNoScroll = outer.offsetWidth; + + // Force scrollbars + outer.style.overflow = 'scroll'; + + // Add inner div + inner.style.width = '100%'; + outer.appendChild(inner); + + widthWithScroll = inner.offsetWidth; + + // Remove divs + outer.parentNode.removeChild(outer); + + return widthNoScroll - widthWithScroll; + } + + /** + * Locks the screen + * @private + */ + function lockScreen() { + if (IS_IOS) { + return; + } + + var $html = $('html'); + var lockedClass = namespacify('is-locked'); + var paddingRight; + var $body; + + if (!$html.hasClass(lockedClass)) { + $body = $(document.body); + + // Zepto does not support '-=', '+=' in the `css` method + paddingRight = parseInt($body.css('padding-right'), 10) + getScrollbarWidth(); + + $body.css('padding-right', paddingRight + 'px'); + $html.addClass(lockedClass); + } + } + + /** + * Unlocks the screen + * @private + */ + function unlockScreen() { + if (IS_IOS) { + return; + } + + var $html = $('html'); + var lockedClass = namespacify('is-locked'); + var paddingRight; + var $body; + + if ($html.hasClass(lockedClass)) { + $body = $(document.body); + + // Zepto does not support '-=', '+=' in the `css` method + paddingRight = parseInt($body.css('padding-right'), 10) - getScrollbarWidth(); + + $body.css('padding-right', paddingRight + 'px'); + $html.removeClass(lockedClass); + } + } + + /** + * Sets a state for an instance + * @private + * @param {Remodal} instance + * @param {STATES} state + * @param {Boolean} isSilent If true, Remodal does not trigger events + * @param {String} Reason of a state change. + */ + function setState(instance, state, isSilent, reason) { + + var newState = namespacify('is', state); + var allStates = [namespacify('is', STATES.CLOSING), + namespacify('is', STATES.OPENING), + namespacify('is', STATES.CLOSED), + namespacify('is', STATES.OPENED)].join(' '); + + instance.$bg + .removeClass(allStates) + .addClass(newState); + + instance.$overlay + .removeClass(allStates) + .addClass(newState); + + instance.$wrapper + .removeClass(allStates) + .addClass(newState); + + instance.$modal + .removeClass(allStates) + .addClass(newState); + + instance.state = state; + !isSilent && instance.$modal.trigger({ + type: state, + reason: reason + }, [{ reason: reason }]); + } + + /** + * Synchronizes with the animation + * @param {Function} doBeforeAnimation + * @param {Function} doAfterAnimation + * @param {Remodal} instance + */ + function syncWithAnimation(doBeforeAnimation, doAfterAnimation, instance) { + var runningAnimationsCount = 0; + + var handleAnimationStart = function(e) { + if (e.target !== this) { + return; + } + + runningAnimationsCount++; + }; + + var handleAnimationEnd = function(e) { + if (e.target !== this) { + return; + } + + if (--runningAnimationsCount === 0) { + + // Remove event listeners + $.each(['$bg', '$overlay', '$wrapper', '$modal'], function(index, elemName) { + instance[elemName].off(ANIMATIONSTART_EVENTS + ' ' + ANIMATIONEND_EVENTS); + }); + + doAfterAnimation(); + } + }; + + $.each(['$bg', '$overlay', '$wrapper', '$modal'], function(index, elemName) { + instance[elemName] + .on(ANIMATIONSTART_EVENTS, handleAnimationStart) + .on(ANIMATIONEND_EVENTS, handleAnimationEnd); + }); + + doBeforeAnimation(); + + // If the animation is not supported by a browser or its duration is 0 + if ( + getAnimationDuration(instance.$bg) === 0 && + getAnimationDuration(instance.$overlay) === 0 && + getAnimationDuration(instance.$wrapper) === 0 && + getAnimationDuration(instance.$modal) === 0 + ) { + + // Remove event listeners + $.each(['$bg', '$overlay', '$wrapper', '$modal'], function(index, elemName) { + instance[elemName].off(ANIMATIONSTART_EVENTS + ' ' + ANIMATIONEND_EVENTS); + }); + + doAfterAnimation(); + } + } + + /** + * Closes immediately + * @private + * @param {Remodal} instance + */ + function halt(instance) { + if (instance.state === STATES.CLOSED) { + return; + } + + $.each(['$bg', '$overlay', '$wrapper', '$modal'], function(index, elemName) { + instance[elemName].off(ANIMATIONSTART_EVENTS + ' ' + ANIMATIONEND_EVENTS); + }); + + instance.$bg.removeClass(instance.settings.modifier); + instance.$overlay.removeClass(instance.settings.modifier).hide(); + instance.$wrapper.hide(); + unlockScreen(); + setState(instance, STATES.CLOSED, true); + } + + /** + * Parses a string with options + * @private + * @param str + * @returns {Object} + */ + function parseOptions(str) { + var obj = {}; + var arr; + var len; + var val; + var i; + + // Remove spaces before and after delimiters + str = str.replace(/\s*:\s*/g, ':').replace(/\s*,\s*/g, ','); + + // Parse a string + arr = str.split(','); + for (i = 0, len = arr.length; i < len; i++) { + arr[i] = arr[i].split(':'); + val = arr[i][1]; + + // Convert a string value if it is like a boolean + if (typeof val === 'string' || val instanceof String) { + val = val === 'true' || (val === 'false' ? false : val); + } + + // Convert a string value if it is like a number + if (typeof val === 'string' || val instanceof String) { + val = !isNaN(val) ? +val : val; + } + + obj[arr[i][0]] = val; + } + + return obj; + } + + /** + * Generates a string separated by dashes and prefixed with NAMESPACE + * @private + * @param {...String} + * @returns {String} + */ + function namespacify() { + var result = NAMESPACE; + + for (var i = 0; i < arguments.length; ++i) { + result += '-' + arguments[i]; + } + + return result; + } + + /** + * Handles the hashchange event + * @private + * @listens hashchange + */ + function handleHashChangeEvent() { + var id = location.hash.replace('#', ''); + var instance; + var $elem; + + if (!id) { + + // Check if we have currently opened modal and animation was completed + if (current && current.state === STATES.OPENED && current.settings.hashTracking) { + current.close(); + } + } else { + + // Catch syntax error if your hash is bad + try { + $elem = $( + '[data-' + PLUGIN_NAME + '-id="' + id + '"]' + ); + } catch (err) {} + + if ($elem && $elem.length) { + instance = $[PLUGIN_NAME].lookup[$elem.data(PLUGIN_NAME)]; + + if (instance && instance.settings.hashTracking) { + instance.open(); + } + } + + } + } + + /** + * Remodal constructor + * @constructor + * @param {jQuery} $modal + * @param {Object} options + */ + function Remodal($modal, options) { + var $body = $(document.body); + var $appendTo = $body; + var remodal = this; + + remodal.settings = $.extend({}, DEFAULTS, options); + remodal.index = $[PLUGIN_NAME].lookup.push(remodal) - 1; + remodal.state = STATES.CLOSED; + + remodal.$overlay = $('.' + namespacify('overlay')); + + if (remodal.settings.appendTo !== null && remodal.settings.appendTo.length) { + $appendTo = $(remodal.settings.appendTo); + } + + if (!remodal.$overlay.length) { + remodal.$overlay = $('
    ').addClass(namespacify('overlay') + ' ' + namespacify('is', STATES.CLOSED)).hide(); + $appendTo.append(remodal.$overlay); + } + + remodal.$bg = $('.' + namespacify('bg')).addClass(namespacify('is', STATES.CLOSED)); + + remodal.$modal = $modal + .addClass( + NAMESPACE + ' ' + + namespacify('is-initialized') + ' ' + + remodal.settings.modifier + ' ' + + namespacify('is', STATES.CLOSED)) + .attr('tabindex', '-1'); + + remodal.$wrapper = $('
    ') + .addClass( + namespacify('wrapper') + ' ' + + remodal.settings.modifier + ' ' + + namespacify('is', STATES.CLOSED)) + .hide() + .append(remodal.$modal); + $appendTo.append(remodal.$wrapper); + + // Add the event listener for the close button + remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="close"]', function(e) { + e.preventDefault(); + + remodal.close(); + }); + + // Add the event listener for the cancel button + remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="cancel"]', function(e) { + e.preventDefault(); + + remodal.$modal.trigger(STATE_CHANGE_REASONS.CANCELLATION); + + if (remodal.settings.closeOnCancel) { + remodal.close(STATE_CHANGE_REASONS.CANCELLATION); + } + }); + + // Add the event listener for the confirm button + remodal.$wrapper.on('click.' + NAMESPACE, '[data-' + PLUGIN_NAME + '-action="confirm"]', function(e) { + e.preventDefault(); + + remodal.$modal.trigger(STATE_CHANGE_REASONS.CONFIRMATION); + + if (remodal.settings.closeOnConfirm) { + remodal.close(STATE_CHANGE_REASONS.CONFIRMATION); + } + }); + + // Add the event listener for the overlay + remodal.$wrapper.on('click.' + NAMESPACE, function(e) { + var $target = $(e.target); + + if (!$target.hasClass(namespacify('wrapper'))) { + return; + } + + if (remodal.settings.closeOnOutsideClick) { + remodal.close(); + } + }); + } + + /** + * Opens a modal window + * @public + */ + Remodal.prototype.open = function() { + var remodal = this; + var id; + + // Check if the animation was completed + if (remodal.state === STATES.OPENING || remodal.state === STATES.CLOSING) { + return; + } + + id = remodal.$modal.attr('data-' + PLUGIN_NAME + '-id'); + + if (id && remodal.settings.hashTracking) { + scrollTop = $(window).scrollTop(); + location.hash = id; + } + + if (current && current !== remodal) { + halt(current); + } + + current = remodal; + lockScreen(); + remodal.$bg.addClass(remodal.settings.modifier); + remodal.$overlay.addClass(remodal.settings.modifier).show(); + remodal.$wrapper.show().scrollTop(0); + remodal.$modal.focus(); + + syncWithAnimation( + function() { + setState(remodal, STATES.OPENING); + }, + + function() { + setState(remodal, STATES.OPENED); + }, + + remodal); + }; + + /** + * Closes a modal window + * @public + * @param {String} reason + */ + Remodal.prototype.close = function(reason) { + var remodal = this; + + // Check if the animation was completed + if (remodal.state === STATES.OPENING || remodal.state === STATES.CLOSING || remodal.state === STATES.CLOSED) { + return; + } + + if ( + remodal.settings.hashTracking && + remodal.$modal.attr('data-' + PLUGIN_NAME + '-id') === location.hash.substr(1) + ) { + location.hash = ''; + $(window).scrollTop(scrollTop); + } + + syncWithAnimation( + function() { + setState(remodal, STATES.CLOSING, false, reason); + }, + + function() { + remodal.$bg.removeClass(remodal.settings.modifier); + remodal.$overlay.removeClass(remodal.settings.modifier).hide(); + remodal.$wrapper.hide(); + unlockScreen(); + + setState(remodal, STATES.CLOSED, false, reason); + }, + + remodal); + }; + + /** + * Returns a current state of a modal + * @public + * @returns {STATES} + */ + Remodal.prototype.getState = function() { + return this.state; + }; + + /** + * Destroys a modal + * @public + */ + Remodal.prototype.destroy = function() { + var lookup = $[PLUGIN_NAME].lookup; + var instanceCount; + + halt(this); + this.$wrapper.remove(); + + delete lookup[this.index]; + instanceCount = $.grep(lookup, function(instance) { + return !!instance; + }).length; + + if (instanceCount === 0) { + this.$overlay.remove(); + this.$bg.removeClass( + namespacify('is', STATES.CLOSING) + ' ' + + namespacify('is', STATES.OPENING) + ' ' + + namespacify('is', STATES.CLOSED) + ' ' + + namespacify('is', STATES.OPENED)); + } + }; + + /** + * Special plugin object for instances + * @public + * @type {Object} + */ + $[PLUGIN_NAME] = { + lookup: [] + }; + + /** + * Plugin constructor + * @constructor + * @param {Object} options + * @returns {JQuery} + */ + $.fn[PLUGIN_NAME] = function(opts) { + var instance; + var $elem; + + this.each(function(index, elem) { + $elem = $(elem); + + if ($elem.data(PLUGIN_NAME) == null) { + instance = new Remodal($elem, opts); + $elem.data(PLUGIN_NAME, instance.index); + + if ( + instance.settings.hashTracking && + $elem.attr('data-' + PLUGIN_NAME + '-id') === location.hash.substr(1) + ) { + instance.open(); + } + } else { + instance = $[PLUGIN_NAME].lookup[$elem.data(PLUGIN_NAME)]; + } + }); + + return instance; + }; + + $(document).ready(function() { + + // data-remodal-target opens a modal window with the special Id + $(document).on('click', '[data-' + PLUGIN_NAME + '-target]', function(e) { + e.preventDefault(); + + var elem = e.currentTarget; + var id = elem.getAttribute('data-' + PLUGIN_NAME + '-target'); + var $target = $('[data-' + PLUGIN_NAME + '-id="' + id + '"]'); + + $[PLUGIN_NAME].lookup[$target.data(PLUGIN_NAME)].open(); + }); + + // Auto initialization of modal windows + // They should have the 'remodal' class attribute + // Also you can write the `data-remodal-options` attribute to pass params into the modal + $(document).find('.' + NAMESPACE).each(function(i, container) { + var $container = $(container); + var options = $container.data(PLUGIN_NAME + '-options'); + + if (!options) { + options = {}; + } else if (typeof options === 'string' || options instanceof String) { + options = parseOptions(options); + } + + $container[PLUGIN_NAME](options); + }); + + // Handles the keydown event + $(document).on('keydown.' + NAMESPACE, function(e) { + if (current && current.settings.closeOnEscape && current.state === STATES.OPENED && e.keyCode === 27) { + current.close(); + } + }); + + // Handles the hashchange event + $(window).on('hashchange.' + NAMESPACE, handleHashChangeEvent); + }); +}); diff --git a/lib/common.lib.php b/lib/common.lib.php index 8bf11615f..604ef164b 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -394,15 +394,15 @@ function get_list($write_row, $board, $skin_url, $subject_len=40) $reply = $list['wr_reply']; - $list['reply'] = strlen($reply)*10; + $list['reply'] = strlen($reply)*20; $list['icon_reply'] = ''; if ($list['reply']) - $list['icon_reply'] = '답변글'; + $list['icon_reply'] = '답변글'; $list['icon_link'] = ''; if ($list['wr_link1'] || $list['wr_link2']) - $list['icon_link'] = '관련링크'; + $list['icon_link'] = ' '; // 분류명 링크 $list['ca_name_href'] = G5_BBS_URL.'/board.php?bo_table='.$board['bo_table'].'&sca='.urlencode($list['ca_name']); @@ -412,15 +412,15 @@ function get_list($write_row, $board, $skin_url, $subject_len=40) $list['icon_new'] = ''; if ($board['bo_new'] && $list['wr_datetime'] >= date("Y-m-d H:i:s", G5_SERVER_TIME - ($board['bo_new'] * 3600))) - $list['icon_new'] = '새글'; + $list['icon_new'] = '새글 '; $list['icon_hot'] = ''; if ($board['bo_hot'] && $list['wr_hit'] >= $board['bo_hot']) - $list['icon_hot'] = '인기글'; + $list['icon_hot'] = ' '; $list['icon_secret'] = ''; if (strstr($list['wr_option'], 'secret')) - $list['icon_secret'] = '비밀글'; + $list['icon_secret'] = ' '; // 링크 for ($i=1; $i<=G5_LINK_COUNT; $i++) { @@ -437,7 +437,7 @@ function get_list($write_row, $board, $skin_url, $subject_len=40) } if ($list['file']['count']) - $list['icon_file'] = '첨부파일'; + $list['icon_file'] = ' '; return $list; } @@ -1234,12 +1234,18 @@ function get_sideview($mb_id, $name='', $email='', $homepage='') $width = $config['cf_member_icon_width']; $height = $config['cf_member_icon_height']; $icon_file_url = G5_DATA_URL.'/member/'.$mb_dir.'/'.$mb_id.'.gif'; - $tmp_name .= ''; + $tmp_name .= ''; if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름 $tmp_name = $tmp_name.' '.$name; } else { - $tmp_name = $tmp_name." ".$name; + if( defined('G5_THEME_NO_PROFILE_IMG') ){ + $tmp_name .= G5_THEME_NO_PROFILE_IMG; + } else if( defined('G5_NO_PROFILE_IMG') ){ + $tmp_name .= G5_NO_PROFILE_IMG; + } + if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름 + $tmp_name = $tmp_name.' '.$name; } } else { $tmp_name = $tmp_name.' '.$name; @@ -2925,6 +2931,11 @@ function member_delete($mb_id) // 게시판관리자인 경우 게시판관리자를 공백으로 sql_query(" update {$g5['board_table']} set bo_admin = '' where bo_admin = '$mb_id' "); + //소셜로그인에서 삭제 또는 해제 + if(function_exists('social_member_link_delete')){ + social_member_link_delete($mb_id); + } + // 아이콘 삭제 @unlink(G5_DATA_PATH.'/member/'.substr($mb_id,0,2).'/'.$mb_id.'.gif'); } @@ -3321,6 +3332,77 @@ function check_write_token($bo_table) return true; } +function get_member_profile_img($mb_id='', $width='', $height='', $alt='profile_image', $title=''){ + global $member; + + static $no_profile_cache = ''; + static $member_cache = array(); + + $src = ''; + + if( $mb_id ){ + if( isset($member_cache[$mb_id]) ){ + $src = $member_cache[$mb_id]; + } else { + $member_img = G5_DATA_PATH.'/member_image/'.substr($mb_id,0,2).'/'.$mb_id.'.gif'; + if (is_file($member_img)) { + $member_cache[$mb_id] = $src = str_replace(G5_DATA_PATH, G5_DATA_URL, $member_img); + } + } + } + + if( !$src ){ + if( !empty($no_profile_cache) ){ + $src = $no_profile_cache; + } else { + // 프로필 이미지가 없을때 기본 이미지 + $no_profile_img = (defined('G5_THEME_NO_PROFILE_IMG') && G5_THEME_NO_PROFILE_IMG) ? G5_THEME_NO_PROFILE_IMG : G5_NO_PROFILE_IMG; + $tmp = array(); + preg_match( '/src="([^"]*)"/i', $foo, $tmp ); + $no_profile_cache = $src = isset($tmp[1]) ? $tmp[1] : G5_IMG_URL.'/no_profile.gif'; + } + } + + if( $src ){ + $attributes = array('src'=>$src, 'width'=>$width, 'height'=>$height, 'alt'=>$alt, 'title'=>$title); + + $output = ' $value) { + if (!empty($value)) { + $output .= sprintf(' %s="%s"', $name, $value); + } + } + $output .= '>'; + + return $output; + } + + return ''; +} + +function get_head_title($title){ + global $g5; + + if( isset($g5['board_title']) && $g5['board_title'] ){ + $title = $g5['board_title']; + } + + return $title; +} + +function is_use_email_certify(){ + global $config; + + if( $config['cf_use_email_certify'] && function_exists('social_is_login_check') ){ + if( $config['cf_social_login_use'] && (get_session('ss_social_provider') || social_is_login_check()) ){ //소셜 로그인을 사용한다면 + $tmp = (defined('G5_SOCIAL_CERTIFY_MAIL') && G5_SOCIAL_CERTIFY_MAIL) ? 1 : 0; + return $tmp; + } + } + + return $config['cf_use_email_certify']; +} + function get_call_func_cache($func, $args=array()){ static $cache = array(); @@ -3402,4 +3484,18 @@ function is_include_path_check($path='', $is_input='') return true; } + +function option_array_checked($option, $arr=array()){ + $checked = ''; + + if( !is_array($arr) ){ + $arr = explode(',', $arr); + } + + if ( !empty($arr) && in_array($option, (array) $arr) ){ + $checked = 'checked="checked"'; + } + + return $checked; +} ?> \ No newline at end of file diff --git a/lib/latest.lib.php b/lib/latest.lib.php index a37ba466e..63fe44f47 100644 --- a/lib/latest.lib.php +++ b/lib/latest.lib.php @@ -32,7 +32,7 @@ function latest($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time= $cache_fwrite = false; if(G5_USE_CACHE) { - $cache_file = G5_DATA_PATH."/cache/latest-{$bo_table}-{$skin_dir}-{$rows}-{$subject_len}.php"; + $cache_file = G5_DATA_PATH."/cache/latest-{$bo_table}-{$skin_dir}-{$rows}-{$subject_len}-serial.php"; if(!file_exists($cache_file)) { $cache_fwrite = true; @@ -44,9 +44,20 @@ function latest($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time= $cache_fwrite = true; } } + + if(!$cache_fwrite) { + try{ + $file_contents = file_get_contents($cache_file); + $file_ex = explode("\n\n", $file_contents); + $caches = unserialize(base64_decode($file_ex[1])); - if(!$cache_fwrite) - include($cache_file); + $list = (is_array($caches) && isset($caches['list'])) ? $caches['list'] : array(); + $bo_subject = (is_array($caches) && isset($caches['bo_subject'])) ? $caches['bo_subject'] : ''; + } catch(Exception $e){ + $cache_fwrite = true; + $list = array(); + } + } } } @@ -62,17 +73,30 @@ function latest($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time= $result = sql_query($sql); for ($i=0; $row = sql_fetch_array($result); $i++) { try { - unset($row['wr_password']); + unset($row['wr_password']); //패스워드 저장 안함( 아예 삭제 ) } catch (Exception $e) { } + $row['wr_email'] = ''; //이메일 저장 안함 + if (strstr($row['wr_option'], 'secret')){ // 비밀글일 경우 내용, 링크, 파일 저장 안함 + $row['wr_content'] = $row['wr_link1'] = $row['wr_link2'] = ''; + $row['file'] = array('count'=>0); + } $list[$i] = get_list($row, $board, $latest_skin_url, $subject_len); } if($cache_fwrite) { $handle = fopen($cache_file, 'w'); - $cache_content = ""; + $caches = array( + 'list' => $list, + 'bo_subject' => sql_escape_string($bo_subject), + ); + $cache_content = "\n\n"; + $cache_content .= base64_encode(serialize($caches)); //serialize + fwrite($handle, $cache_content); fclose($handle); + + @chmod($cache_file, 0640); } } diff --git a/lib/thumbnail.lib.php b/lib/thumbnail.lib.php index 3f6c20866..1665d207a 100644 --- a/lib/thumbnail.lib.php +++ b/lib/thumbnail.lib.php @@ -349,14 +349,17 @@ function thumbnail($filename, $source_path, $target_path, $thumb_width, $thumb_h } else { // 비율에 맞게 생성 $dst = imagecreatetruecolor($dst_w, $dst_h); $bgcolor = imagecolorallocate($dst, 255, 255, 255); // 배경색 - if($src_w > $src_h) { - $tmp_h = round(($dst_w * $src_h) / $src_w); - $dst_y = round(($dst_h - $tmp_h) / 2); - $dst_h = $tmp_h; - } else { - $tmp_w = round(($dst_h * $src_w) / $src_h); - $dst_x = round(($dst_w - $tmp_w) / 2); - $dst_w = $tmp_w; + + if ( !((defined('G5_USE_THUMB_RATIO') && false === G5_USE_THUMB_RATIO) || (defined('G5_THEME_USE_THUMB_RATIO') && false === G5_THEME_USE_THUMB_RATIO)) ){ + if($src_w > $src_h) { + $tmp_h = round(($dst_w * $src_h) / $src_w); + $dst_y = round(($dst_h - $tmp_h) / 2); + $dst_h = $tmp_h; + } else { + $tmp_w = round(($dst_h * $src_w) / $src_h); + $dst_x = round(($dst_w - $tmp_w) / 2); + $dst_w = $tmp_w; + } } if($size[2] == 3) { @@ -382,34 +385,64 @@ function thumbnail($filename, $source_path, $target_path, $thumb_width, $thumb_h $dst = imagecreatetruecolor($dst_w, $dst_h); $bgcolor = imagecolorallocate($dst, 255, 255, 255); // 배경색 - if($src_w < $dst_w) { - if($src_h >= $dst_h) { - if( $src_h > $src_w ){ - $tmp_w = round(($dst_h * $src_w) / $src_h); - $dst_x = round(($dst_w - $tmp_w) / 2); - $dst_w = $tmp_w; - } else { + if ( ((defined('G5_USE_THUMB_RATIO') && false === G5_USE_THUMB_RATIO) || (defined('G5_THEME_USE_THUMB_RATIO') && false === G5_THEME_USE_THUMB_RATIO)) ){ + //이미지 썸네일을 비율 유지하지 않습니다. (5.2.6 버전 이하에서 처리된 부분과 같음) + + if($src_w < $dst_w) { + if($src_h >= $dst_h) { $dst_x = round(($dst_w - $src_w) / 2); $src_h = $dst_h; + if( $dst_w > $src_w ){ + $dst_w = $src_w; + } + } else { + $dst_x = round(($dst_w - $src_w) / 2); + $dst_y = round(($dst_h - $src_h) / 2); + $dst_w = $src_w; + $dst_h = $src_h; } } else { - $dst_x = round(($dst_w - $src_w) / 2); - $dst_y = round(($dst_h - $src_h) / 2); - $dst_w = $src_w; - $dst_h = $src_h; - } - } else { - if($src_h < $dst_h) { - if( $src_w > $dst_w ){ - $tmp_h = round(($dst_w * $src_h) / $src_w); - $dst_y = round(($dst_h - $tmp_h) / 2); - $dst_h = $tmp_h; - } else { + if($src_h < $dst_h) { $dst_y = round(($dst_h - $src_h) / 2); $dst_h = $src_h; $src_w = $dst_w; } } + + } else { + //이미지 썸네일을 비율 유지하며 썸네일 생성합니다. + if($src_w < $dst_w) { + if($src_h >= $dst_h) { + if( $src_h > $src_w ){ + $tmp_w = round(($dst_h * $src_w) / $src_h); + $dst_x = round(($dst_w - $tmp_w) / 2); + $dst_w = $tmp_w; + } else { + $dst_x = round(($dst_w - $src_w) / 2); + $src_h = $dst_h; + if( $dst_w > $src_w ){ + $dst_w = $src_w; + } + } + } else { + $dst_x = round(($dst_w - $src_w) / 2); + $dst_y = round(($dst_h - $src_h) / 2); + $dst_w = $src_w; + $dst_h = $src_h; + } + } else { + if($src_h < $dst_h) { + if( $src_w > $dst_w ){ + $tmp_h = round(($dst_w * $src_h) / $src_w); + $dst_y = round(($dst_h - $tmp_h) / 2); + $dst_h = $tmp_h; + } else { + $dst_y = round(($dst_h - $src_h) / 2); + $dst_h = $src_h; + $src_w = $dst_w; + } + } + } } if($size[2] == 3) { diff --git a/mobile/head.php b/mobile/head.php index c7727e996..03d1c2d3b 100644 --- a/mobile/head.php +++ b/mobile/head.php @@ -28,12 +28,14 @@ include_once(G5_LIB_PATH.'/popular.lib.php');
    - +
    + +
      '.PHP_EOL; + echo ' - + +
      +

      사이트 내 전체검색

      +
      + + + + +
      + + +
    - + +
    + -
    -

    사이트 내 전체검색

    -
    - - - - -
    + - - +
    + + + + +
    - - - +
    -
    +
    -
    - -
    +
    -
    -
    - - - - -
    \ No newline at end of file +

    diff --git a/mobile/index.php b/mobile/index.php index 499d2f573..a540e326b 100644 --- a/mobile/index.php +++ b/mobile/index.php @@ -25,7 +25,7 @@ for ($i=0; $row=sql_fetch_array($result); $i++) { // 사용방법 // latest(스킨, 게시판아이디, 출력라인, 글자수); - echo latest("basic", $row['bo_table'], 5, 25); + echo latest('basic', $row['bo_table'], 5, 25); } ?> diff --git a/mobile/skin/board/basic/img/btn_next2.gif b/mobile/skin/board/basic/img/btn_next2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f17993bb163dcdecc4e41ffc964c31e45d79877a GIT binary patch literal 55 zcmZ?wbhEHbWMklFXkcK-$;tWu|G(l-7DfgJMg|=QAOOiQF!8z6B}kmwJ0V&4R77?) HD}yxvenk!U literal 0 HcmV?d00001 diff --git a/mobile/skin/board/basic/img/btn_prev2.gif b/mobile/skin/board/basic/img/btn_prev2.gif new file mode 100644 index 0000000000000000000000000000000000000000..63604af1a8a977511177cde67e5c0c6a9fad5baa GIT binary patch literal 56 zcmZ?wbhEHbWMklFXkcK-$;tWu|G(l-7DfgJMg|=QAOOiQF!A^Bich%l`^LnsbI(Pt JEMQ=;1^}Mz5N7}Y literal 0 HcmV?d00001 diff --git a/mobile/skin/board/basic/img/cmt_btn.png b/mobile/skin/board/basic/img/cmt_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..202f1ff475be9d3b371fb8d87034e9cdebd8d37f GIT binary patch literal 2862 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 VnTK9&Vf6=<>z=NDF6*2UngFu!X5|0? literal 0 HcmV?d00001 diff --git a/mobile/skin/board/basic/img/icon_file.gif b/mobile/skin/board/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/mobile/skin/board/basic/img/icon_good.png b/mobile/skin/board/basic/img/icon_good.png new file mode 100644 index 0000000000000000000000000000000000000000..69841a1340a76f2b4bfeb4a3a9e74b8a5846fe43 GIT binary patch literal 1288 zcmbVMZA{!`9Pfq1I3`QxTc&=n7KtP5t}l1(T`MO!+PiVnyJN>0&WwBEfC(!}ei*Fj>^OWDGN(0*8Je`(V?j z&)fg^`@eUnIk~f{^3h5JL8{_SLK@Cn-Er?d@cXp7a|uq5*wL)rqUY?QXaXc6>m2}% zt70ce15xgM@jR$Ukcym=$=cb(bDX5BKGBu&IjRBC2vXnR7@|}FHrfF?6)lWipZo$t z6*-Kx(g`AA@F1@=^_ifhFPV}03KA=04bPzU4hIQTV2h}uc54>rgs~M~4zAr}979(` z>_Qk@H7c8EMtR)?DDCrmC4wYThVhXBnqkNtC`FJIPQaJ(k^zopI4X#)Js8wx$~i7A z#MX4dT^P&Tw!z_eu~_sK{XX67#7UNAT@H%!LJ6PKqSU6p#T#VSU*WdnGnnRSt=SMLm@vyM))!|u35IINuaD(fqK`l z^j)zWZvxTQ&5W*hmn)z-uiLtn*A0|!VbJZZiYDtttJY1=s<#3#m6w1VGj$bRi7%&Y zpx;mNQ3?*CG0Ly_%|{4!*b2hKZZ{{_(Jop+76y-KXW$q_Xo-O%a=aC`cZ1WboBP*_w2RP7iz}1 zV^=nX_v6!qt#o-lU7Q+y{Qf8J%TJ%W{NCIhGTuZlyfwY$jBz-(>G0xL74Q7;`q;^^ zlKIAaa(kr{`;g;i@Po#IUir7dns1#{!}Otrh64j_??1->a;J+Je0g$qPisy6$NN4T zPqw!SQ$&}fX;VWZBX4r0V*ku*{d+e*Fwy!--PpjXRQ0HnPcMv*{Q2;5^>P0CkA>4u zBtqvLvG3W^1y4>o7}`fC^aW*U8M$=p`L)uVzOBcVHvhC-c=byHnc~&&{ z->-j+TI7Rv!7V`uOwG1%KXu`g-ElyLo%xOxyl()9DW@ z4u9Nq;_b{GKkvSLl0M@}>a^$Oi(YlCc{hLW^YVqy3g$hEnecJr$$!6oy_>V=^X`lP z|Nm#83@H9&VPs&?V$cB@1M(9CTZ}`flj9^Et%(QJ7fUf1%n9mvbTfv5`KaU4O$-dO z?;0DPu2Nzx<~oougO#bcIZ)xq*%-!!4ICLCVuTnuw1gSdDmWR0)A$)Q)VY-y_!|Tm Sl@%BT8e;g^*!U_O8LR=!XM;xo literal 97 zcmZ?wbhEHbKCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/mobile/skin/board/basic/img/icon_lock.png b/mobile/skin/board/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; RCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ke6^lgE!9KDdAH?w#AWZr-?l?dp}w zmo8p7f9~v=)2B|JIDYKtk;8`$9@xKc@1EVecJA1|ZR?iJn>KD(zi#cC)vH#nSiWrO zlEsS_E|@=W?wr}PX3m&CZR(WClO|5+@9XX9?&|DlZ)CJqCAJzX7bElmw|HB}X5B}D~!IawKLDM<-&F;Nj=AwdCtK3*Pf zE=~@1HdYp9CPoGZ#h)xdl954&0SG`P4+E1_OY=;&S8qgOKCNk!;0vz)T^YHC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/mobile/skin/board/basic/img/icon_view.png b/mobile/skin/board/basic/img/icon_view.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa5eb1e62ce43590450d01d3048539ee2b6a4d0 GIT binary patch literal 1936 zcmaJ?Yfuws6b%UKprR-QL8~!V1kGzh5=crwNC*!JVu*@`Dj``ygzSc7ArQ4AVSMta zpn_sV5zwkAK>|XtNa~0qEn@M7)=^?gEDknSrUHW4jTPD-r8~R(J?5Nq@BQwX`S!;| zhs|;Fbi!aTb0WgI0(A7YeKV({|NQYLIXZYCp>aqooQ$YNN)Qt)fs;U7gj^&A1)xZh zoqh`pz+k4~Wx_ZljvvJm!*Y_yh9PCi6(}2n2?)wkh{UNNf=dFWGKh`0wp_#GWD+)h z6P-`tD>z_^EL@`mV>Qu2u_jf_l;DE`aRFH@R6q_QB3za{4N|eP*!YjSEOc($CgX7* zAxJ74|94Vx{1_YuR)RP>$(Jam0054`AOSQwg8>k5R0=>PQ_z<|1ZXTegGKejeR}X{ zG^He&CE)Tt#X?tXd#e%Y@zP4O($)OE+&l+La5u7sIBiN_OdV-2Zso5urTZKz|rj~1?dZK zb{#8CjpD|Nwfost`OSemR zBX;-E1Pis$ddPa=?AB{TZ0X7ataUpdkB&cmHu^=^Xh4@WyZqUhNzpSzUaPe(Ep5`K zJDQ!wtxjGgM~>WhQ@(Vzo!Lk^Xs5{`opKv?c)Dw4?~O;P}R5c^pUZpZUb$0U~;mNE>O8+MB|$ z3C@L{9rp)Q>(A-phBmr(jQGF6J{!SA{`PL0xZHau=0RFtb?>V0LVip?cn%w7|6J~8$@INJzyC0%sn zbl{$#*x7ltIc|fC9q$fTKOWls1al^eQPVpA>d?MxL%K>fVEbsqA0ZCiLryVo}h)1K>!c1UNY zZa-3?TkN9b_u=U^-IcHGPUNTe_rJ~M7^2jf9Z7xVxczsywJW8@vSqv6IfhU?z;qB-f1bKoj*=pghq2Og(PbK0xq=_ A=>Px# literal 0 HcmV?d00001 diff --git a/mobile/skin/board/basic/img/require.png b/mobile/skin/board/basic/img/require.png new file mode 100644 index 0000000000000000000000000000000000000000..c03e1eb6f5e8bc7ac6e40bbf6324bd2ac3fd3039 GIT binary patch literal 2922 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 UB`Y^oGynhq07*qoM6N<$g4?ZVo&W#< literal 0 HcmV?d00001 diff --git a/mobile/skin/board/basic/img/sch_btn.png b/mobile/skin/board/basic/img/sch_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..94f98db8f486c86e4c73c8c457b1f6170d716d7e GIT binary patch literal 1234 zcmbVMO>Em_7L#sBtRF5+bZX+C#7^urYZBY(0!yiqNNf2KbK)0BR-RP@zdo6HJ|iG^BCa5F7?#5?nZ-4hg{lAu$fLXon#|%jYyH9I73# zY=1v~p6C7f-q&x8jtuV)JsBbhVt?+GQo!Q@|JfVF?-Sp>^E@7UTy@MXqN>}_Y)GVa zRE8jDY7?*kHGOva9vmcy&ZN-)x5Cf^tBZf=u~W@?i$Df zzM@t}Gj5W?o^FR=*7NxtVasVH3a5=>*cI)RX6ukHKnKm( z6?`7mzBU=>?(v3vAofOj(Khg*Xj2NR%$U$}b4rrJUn07pOA41r^U=7da*Cn~EGx!E zURG2lnqdWwRpM=p-MAu?&I+-NsLHa)vZ|2g8CI1US&pkwUXJZ>bC%<3Rt2{08rW`& zn|Lf&l5MED$Sxr?)vkci8gh|SLvGzLkJ6Z+W#yO~GZDfLGekEfU z`%F|-)7iKh!yY%|meY*F@q8?v&dOXOLAAL0|H&DRouU2W_)oF4w{Qje)1A`Ci=F0y z7Va1ux5m=32j37xMiq zJLKa1C7$hMyGgXCJaK*PRd6MA_l1Q=LGlK{9w2|~yg5K3MF2hb9v(`4{njtXJHW}s zYhNB6|Ko6J{b|zqY5m;8{xPc7S{uH8>2RuRF?l`_T>0S7rJt`Z@AKr5 hVCZu7y(G~QB)VQHjxXGLX~6%>', 0); ?> -

    목록

    - + + + -
    "> +
    -
    -
    - Total - 페이지 -
    - - - - +
    + 전체 + 페이지
    +
    @@ -49,79 +45,75 @@ add_stylesheet('', 0 -
      -
    • 목록
    • +
    • 목록
    • -
    • -
    • -
    • +
    • +
    • +
    - -
    @@ -144,7 +136,7 @@ add_stylesheet('', 0 - @@ -153,8 +145,8 @@ add_stylesheet('', 0 - - + + diff --git a/mobile/skin/board/basic/style.css b/mobile/skin/board/basic/style.css index b1d433d3a..3dde42f44 100644 --- a/mobile/skin/board/basic/style.css +++ b/mobile/skin/board/basic/style.css @@ -1,5 +1,4 @@ @charset "utf-8"; -/* SIR 지운아빠 */ /* ### 기본 스타일 커스터마이징 시작 ### */ @@ -11,7 +10,7 @@ #bo_list a.btn_b02:focus, #bo_list .btn_b02:hover {} #bo_list a.btn_admin {} /* 관리자 전용 버튼 */ #bo_list a.btn_admin:focus, #bo_list a.btn_admin:hover {} - +.chk_all{margin:10px 0} /* 읽기 버튼 */ #bo_v a.btn_b01 {} #bo_v a.btn_b01:focus, #bo_v .btn_b01:hover {} @@ -26,55 +25,6 @@ #bo_w .btn_cancel {} #bo_w .btn_frmline {} /* 우편번호검색버튼 등 */ -/* 기본테이블 */ -/* 목록 테이블 */ -#bo_list .tbl_head01 {} -#bo_list .tbl_head01 caption {} -#bo_list .tbl_head01 thead th {} -#bo_list .tbl_head01 thead a {} -#bo_list .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */ -#bo_list .tbl_head01 tfoot th {} -#bo_list .tbl_head01 tfoot td {} -#bo_list .tbl_head01 tbody th {} -#bo_list .tbl_head01 td {} -#bo_list .tbl_head01 a {} -#bo_list td.empty_table {} - -/* 읽기 내 테이블 */ -#bo_v .tbl_head01 {} -#bo_v .tbl_head01 caption {} -#bo_v .tbl_head01 thead th {} -#bo_v .tbl_head01 thead a {} -#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */ -#bo_v .tbl_head01 tfoot th {} -#bo_v .tbl_head01 tfoot td {} -#bo_v .tbl_head01 tbody th {} -#bo_v .tbl_head01 td {} -#bo_v .tbl_head01 a {} -#bo_v td.empty_table {} - -/* 쓰기 테이블 */ -#bo_w table {} -#bo_w caption {} -#bo_w .frm_address {} -#bo_w .frm_file {} -#bo_w .frm_info {} - -#bo_w .tbl_frm01 {} -#bo_w .tbl_frm01 caption {} -#bo_w .tbl_frm01 th {} -#bo_w .tbl_frm01 td {} -#bo_w .tbl_frm01 textarea, #bo_w .frm_input {} -#bo_w .tbl_frm01 textarea {} -/* -#bo_w .tbl_frm01 #captcha {} -#bo_w .tbl_frm01 #captcha input {} -*/ -#bo_w .tbl_frm01 a {} - -#bo_w .required, #bo_w textarea.required {} - -/* ### 기본 스타일 커스터마이징 끝 ### */ /* 게시판 목록 */ #bo_list .td_chk {width:30px;text-align:center} @@ -88,14 +38,24 @@ #bo_list .td_date {width:60px;text-align:center} #bo_list .td_datetime {width:150px;text-align:center} #bo_list .td_mng {width:80px;text-align:center} +#bo_list .notice_icon{display: inline-block;background: #ff6f6f;padding: 0 5px;line-height: 20px;border-radius: 5px;font-weight: normal;font-size:11px;color: #fff;} +#bo_list .notice_icon i{color:#fff} +#bo_list .bo_subject .fa-download{width:16px;height:16px;line-height:16px;background:#ecaa30;color:#fff;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .fa-link{width:16px;height:16px;line-height:16px;background:#2aa974;color:#fff;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .fa-heart{color:#ff0000;;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .new_icon{display:inline-block;padding: 0 3px;line-height:16px ;font-size:0.833em;color:#fff;background:#c56bed} +#bo_list .bo_tit .fa-lock{color:#666} + #bo_cate h2 {width:0;height:0;font-size:0;line-height:0;overflow:hidden} -#bo_cate ul {margin:5px 10px;padding-left:1px;zoom:1} -#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} -#bo_cate li {float:left;margin-bottom:-1px;width:25%} -#bo_cate a {display:block;position:relative;margin-left:-1px;padding:5px 0;border:1px solid #ddd;background:#f7f7f7;color:#888;text-align:center;text-decoration:none;letter-spacing:-0.1em} -#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none} -#bo_cate #bo_cate_on {z-index:2;border:1px solid #565e60;background:#fff;color:#565e60;font-weight:bold} +#bo_cate ul {margin: 10px;padding-left:1px;zoom:1} +#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} +#bo_cate li{display:inline-block;float:left;margin:3px 5px 3px 0} +#bo_cate a {display:block;line-height:24px;padding:0 10px;border-radius:13px;background:#fff;} +#bo_cate #bo_cate_on {background:#4162ff;color:#fff; +-webkit-box-shadow:0 0 5px rgba(65,98,255,0.8); +-moz-box-shadow:0 0 5px rgba(65,98,255,0.8); +box-shadow: 0 0 8px rgba(65,98,255,0.8);} /* 관리자일 때 */ #bo_list_admin th label {position:absolute;font-size:0;line-height:0;overflow:hidden} @@ -112,25 +72,35 @@ #bo_list td:nth-of-type(2) {text-align:center} /* 게시판 목록 공통 */ -.bo_fx {margin-bottom:5px;padding:5px 10px} +.bo_fx {margin-bottom:5px;padding:0 10px} .bo_fx:after {display:block;visibility:hidden;clear:both;content:""} .bo_fx ul {margin:0;padding:0;list-style:none} -#bo_list_total {float:left;padding:0;height:2.5em;line-height:2.5em} +#bo_list_total{position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden;font-size:0} .btn_bo_user {float:right;margin:0;padding:0;list-style:none} .btn_bo_user li {float:left;margin-left:5px} -.btn_bo_adm {float:left} -.btn_bo_adm li {float:left;margin-right:5px} -.btn_bo_adm input {padding:8px;border:0;background:#e8180c;color:#fff;text-decoration:none;vertical-align:middle} +.btn_bo_adm {text-align:center} +.btn_bo_adm li {display:inline-block;} +.btn_bo_adm button {border:0;padding:0 10px;background:#d13f4a;color:#fff;text-decoration:none;vertical-align:middle} .bo_notice td {background:#f7f7f7} .bo_notice td a {font-weight:bold} .td_num strong {color:#000} -.bo_cate_link {display:inline-block;margin:0 3px 0 0;padding:0 6px 0 0;border-right:1px solid #e7f1ed;color:#999 !important;font-weight:bold;text-decoration:none} /* 글제목줄 분류스타일 */ +.bo_cate_link {;color:#3ca1ff !important;font-weight:normal;text-decoration:none;font-size:0.92em} /* 글제목줄 분류스타일 */ +.bo_subject{display:block;font-size:1.083em;font-weight:bold;margin:5px 0} +.bo_subject i{color: #8d96c2;font-size:12px} +.bo_subject .fa-heart{color:#ff0000} .bo_current {color:#e8180c} -.td_subject a {display:block} -.td_subject img {margin-left:3px} -#bo_list .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold} +.bo_info{border-top: 1px solid #eee;margin: 10px 0 0;line-height: 20px;color: #666;position: relative;padding-top: 10px;vertical-align:top} +.bo_info .comment_icon{background:url(./img/icon_comment.png) no-repeat 50% 50% ;display:inline-block;width:20px;height:28px;text-indent:-999px;overflow:hidden;vertical-align:top;background-size:70%;margin:0 0px 0 5px} +.bo_info .bo_date{position:absolute;top:10px;right:0;font-style: italic;} +.bo_info .cnt_cmt {display:inline-block;margin: 0 5px 0 3px;} +.bo_info .profile_img img{border-radius:50%;vertical-align:top} -#bo_sch {margin-bottom:10px;padding-top:5px;text-align:center} +#bo_sch {background:#fff;border:1px solid #bdc2d8;position:relative;margin:10px;border-radius:3px} +#bo_sch:after {display:block;visibility:hidden;clear:both;content:""} +#bo_sch legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} +#bo_sch select{border:0;;margin:9px 0;height:20px;border-right:1px solid #ddd;float:left;width:40%} +#bo_sch .sch_input{height:38px;border:0;padding:0;background-color:transparent;float:left;width:60%;padding:0 40px 0 10px} +#bo_sch .sch_btn{height:38px;position:absolute;top:0;right:0;border:0;width:40px;background:none;font-size:15px} /* 게시판 쓰기 */ #bo_w #wr_email, #bo_w #wr_homepage, #bo_w #wr_subject {width:100%} @@ -142,97 +112,163 @@ #wr_email, #wr_homepage, #wr_subject, .wr_link {width:100%} /* 게시판 읽기 */ -#bo_v {margin-bottom:15px;padding-bottom:15px} +#bo_v {padding:20px 10px 10px;background:#fff +;-webkit-box-shadow: 0 1px 4px #ddd; +-moz-box-shadow: 0 1px 4px #ddd; +box-shadow: 0 1px 4px #ddd;} -#bo_v_table {padding:0 10px;color:#999;font-size:0.9em;font-weight:bold} +#bo_v_table {padding: 10px;color:#999;font-size:0.9em;font-weight:bold} -#bo_v_title {padding:0 10px 5px;font-size:1.2em} +#bo_v_title {;text-align:center} +.bo_v_cate{display:inline-block;background: #4162ff;color: #fff;border-radius: 13px;line-height: 24px;padding: 0 10px;font-weight:normal; +-webkit-box-shadow: 0 0 5px rgba(65,98,255,0.8); +-moz-box-shadow: 0 0 5px rgba(65,98,255,0.8); +box-shadow: 0 0 8px rgba(65,98,255,0.8);} +.bo_v_tit{display:block;font-size:1.5em;margin:10px 0 0} +#bo_v header p{font-size:0.92em;color:#777;font-style:italic ;text-align:center;margin:10px 0 0 } -#bo_v_info {padding:0 10px 10px;border-bottom:1px solid #ddd} +#bo_v_info {padding:15px 0px 10px;border-bottom:1px solid #eee;text-align:center;color:#666;line-height:20px;} #bo_v_info h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} -#bo_v_info {} -#bo_v_info strong {display:inline-block;margin:0 0 0 5px;font-weight:normal} +#bo_v_info strong {display:inline-block;font-weight:normal;margin:0 5px} +#bo_v_info .profile_img img{border-radius:50%;vertical-align:top} +#bo_v_info .icon_view{display:inline-block;background:url(./img/icon_view.png) no-repeat 50% 50%;background-size:80%;height:15px;width:20px;overflow:hidden;text-indent:-999px;vertical-align:middle;margin:0 3px 0 5px} +#bo_v_info .icon_comment{display:inline-block;background:url(./img/icon_comment.png) no-repeat 50% 50%;background-size:70%;height:15px;width:20px;overflow:hidden;text-indent:-999px;vertical-align:middle;margin:0 3px 0 5px} -#bo_v_file {} -#bo_v_file h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} +#bo_v_file {margin:10px 0} +#bo_v_file h2 {background:#949ab4;color:#fff;margin-bottom:1px;line-height:35px;padding: 0 10px} #bo_v_file ul {margin:0;padding:0;list-style:none} -#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f7} -#bo_v_file a {display:inline-block;padding:5px 0;color:#000;text-decoration:none} +#bo_v_file li {padding: 10px;border-bottom:1px solid #fff;background:#f1f7fa;color:#777} +#bo_v_file a {display:block;color:#000;text-decoration:none;margin:0 0 3px} #bo_v_file a:focus, #bo_v_file a:hover, #bo_v_file a:active {text-decoration:none} -.bo_v_file_cnt {display:inline-block;margin:0 10px} +#bo_v_file a strong{color:#3497d9;text-decoration:underline} +.bo_v_file_cnt {font-size:0.92em} -#bo_v_link {} -#bo_v_link h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} +#bo_v_link{margin:10px 0} +#bo_v_link h2 {background:#949ab4;color:#fff;margin-bottom:1px;line-height:35px;padding: 0 10px} #bo_v_link ul {margin:0;padding:0;list-style:none} -#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f7} -#bo_v_link a {display:inline-block;padding:5px 0;color:#000;text-decoration:none} +#bo_v_link li {padding: 10px;border-bottom:1px solid #fff;background:#f1f7fa;color:#777} +#bo_v_link a {display:block;color:#000;text-decoration:none;margin:0 0 3px} +#bo_v_link a strong{color:#3497d9;text-decoration:underline} #bo_v_link a:focus, #bo_v_link a:hover, #bo_v_link a:active {text-decoration:none} -.bo_v_link_cnt {display:inline-block;margin:0 10px} +.bo_v_link_cnt {font-size:0.92em} -#bo_v_top {margin:0 0 10px;padding:10px} +#bo_v_top {margin:10px 0;} #bo_v_top:after {display:block;visibility:hidden;clear:both;content:""} #bo_v_top h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} #bo_v_top ul {margin:0;padding:0;list-style:none} +#bo_v_top ul:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_top ul li{display:inline-block;} +.bo_v_left{float:left} +.bo_v_right{float:right} #bo_v_bot {padding:0 10px} #bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""} #bo_v_bot h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} #bo_v_bot ul {margin:0;padding:0;list-style:none} -.bo_v_nb {float:left} -.bo_v_nb li {float:left;margin-right:5px} -.bo_v_com {float:right} -.bo_v_com li {float:left;margin-left:5px} +.bo_v_nb{margin:10px 0;border-top:1px solid #ddd;border-bottom:1px solid #ddd;text-align:center;position:relative;} +.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""} +.bo_v_nb li {} +.bo_v_nb li a{display:inline-block;padding:10px;color:#777} +.bo_v_nb .bo_v_next{;position:absolute;top:0;right:0;} +.bo_v_nb .bo_v_prev{;position:absolute;top:0;left:0;} -#bo_v_atc {padding:0 10px;min-height:200px} +#bo_v_atc {min-height:200px} #bo_v_atc_title {margin:0;padding:0;height:0;overflow:hidden} #bo_v_img {margin:0 0 10px;width:100%;overflow:hidden;zoom:1} #bo_v_img:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_img a.view_image{display:block} #bo_v_img img {margin-bottom:15px;max-width:100%;height:auto} -#bo_v_con {margin-bottom:20px;width:100%;font-size:1.250em;line-height:1.7em;word-break:break-all;overflow:hidden} +#bo_v_con {min-height:200px;margin-bottom:20px;width:100%;font-size:1.250em;line-height:1.7em;word-break:break-all;overflow:hidden} #bo_v_con a {color:#000;text-decoration:underline} #bo_v_con img {max-width:100%;height:auto} -#bo_v_act {position:relative;margin-bottom:20px;text-align:center} +#bo_v_act {margin-bottom:30px;text-align:center} +#bo_v_act .bo_v_act_gng {position:relative} #bo_v_act a {margin-right:5px;vertical-align:middle} -#bo_v_act strong {color:#ff3061} -#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;right:10%;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center} +#bo_v_act a:hover{background-color:#f3f3f3} +#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center} +#bo_v_act .bo_v_good{padding:15px 0;display:inline-block;border:1px solid #000;width:70px;height:70px;line-height:20px;border-radius:50%;font-style:italic} +#bo_v_act .bo_v_nogood{padding:15px 0;display:inline-block;border:1px solid #000;width:70px;height:70px;line-height:20px;border-radius:50%;font-style:italic} +#bo_v_act .bo_v_good i,#bo_v_act .bo_v_nogood i{font-size:18px;} +#bo_v_share{position:relative;margin:20px 0;text-align:right} +#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_share .btn_scrap{display:inline-block;background:#d4d4d4;color:#444;line-height:40px;width:60px;font-weight:bold;text-align:center;float:left;border-radius:3px} -#bo_v_sns {margin:0 0 20px;padding:0;list-style:none;zoom:1} +.btn_share{display:none;} +.bo_v_snswr{position:relative;float:right} +#bo_v_sns {;padding:0;list-style:none;zoom:1} #bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""} -#bo_v_sns li {float:left;margin:0 5px 0 0} +#bo_v_sns li {float:left;width:50px;text-align:center;margin-left:3px} +#bo_v_sns li a{height:40px;padding:10px 0;} +#bo_v_sns li .sns_f{display:block;background:#415b92;border-radius:3px} +#bo_v_sns li .sns_t{display:block;background:#35b3dc;border-radius:3px} +#bo_v_sns li .sns_g{display:block;background:#d5503a;border-radius:3px} +#bo_v_sns li .sns_k{display:block;background:#fbe300;border-radius:3px} +#bo_v_sns li img{vertical-align:top} /* 게시판 댓글 */ -#bo_vc {margin:0 0 20px;padding:20px 10px 10px;border:1px solid #e5e8ec;background:#f5f8f9} -#bo_vc h2 {margin-bottom:5px} -#bo_vc article {padding:0 0 5px;border-top:1px dotted #ccc} -#bo_vc header {position:relative;padding:13px 0 5px} -#bo_vc header .icon_reply {position:absolute;top:13px;left:-20px} +.cmt_btn{background:url('./img/cmt_btn.png') no-repeat right 8px;text-align:left ;width:100% ;border:0;color:#ed6478;font-weight:bold;font-size:1.167em;margin: 20px 0 10px;padding:0 0 10px ;border-bottom:1px solid #e8e8e8} +.cmt_btn_op{background:url('./img/cmt_btn.png') no-repeat right -23px} + +#bo_vc {} +#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#bo_vc article {margin:0 0 15px} +#bo_vc header {position:relative;padding:0 0 0 50px;height:40px;line-height:20px} +#bo_vc .comment_profile_img{position:absolute;top:0;left:0} +#bo_vc .comment_profile_img img, #bo_vc .profile_img img{border-radius:50%} #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold} -.bo_vc_hdinfo {display:inline-block;margin:0 10px 0 5px} +.bo_vc_hdinfo {display:inline-block;color:#777;font-style:italic} #bo_vc h1 {width:0;height:0;font-size:0;line-height:0;overflow:hidden} -#bo_vc a {color:#000;text-decoration:none} -#bo_vc p {padding:0 0 5px;line-height:1.8em} +#bo_vc .cmt_contents {padding:10px 15px ;margin:5px 0 0 ;border-radius:5px;background:#f6f6f6;line-height:1.8em} +#bo_vc .cmt_contents p{font-size:1.083em} #bo_vc p a {text-decoration:underline} -#bo_vc p a.s_cmt {text-decoration:none} +#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479} #bo_vc_empty {margin:0;padding:15px !important;text-align:center} #bo_vc #bo_vc_winfo {float:left} #bo_vc footer {zoom:1} #bo_vc footer:after {display:block;visibility:hidden;clear:both;content:""} -.bo_vc_act {float:right;margin:0;list-style:none} +.bo_vc_act {text-align:right;;margin:0;list-style:none} .bo_vc_act:after {display:block;visibility:hidden;clear:both;content:""} -.bo_vc_act li {float:left;margin-left:5px} +.bo_vc_act li {display:inline-block;margin:0 2px} +.bo_vc_act li a{color:#3497d9;text-decoration:underline} -#bo_vc_w {position:relative;margin-bottom:10px;padding:0 10px 15px;border-bottom:1px solid #dde4e9} -#bo_vc_w h2 {padding:10px 0 5px} -#bo_vc_w .tbl_wrap {margin:0 0 15px} -#bo_vc_w #char_cnt {display:block;margin-bottom:5px} -#bo_vc_w textarea {width:99%} +.bo_vc_w {position:relative;margin:10px 0;display:block;} +.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +.bo_vc_w #char_cnt {display:block;margin:0 0 5px} +.bo_vc_w textarea{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px} +#wr_secret{} +.bo_vc_w_info{margin:5px 0} +.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w_info .frm_input{float:left;;width:49.5%;margin: 0 0 5px 0} +.bo_vc_w_info #wr_password{float:right;} +.bo_vc_w_info #captcha{;display:block;clear:both} +.bo_vc_w .btn_confirm{margin-top:5px;clear:both} +.bo_vc_w .icon_lock{display:inline-block;font-size:17px;padding: 5px;margin-right:5px;} +.bo_vc_w .btn_submit{height:50px;width:100%;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em;} +.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w .bo_vc_secret{float:right;display:block;} -#bo_vc_sns {margin:0;padding:0;list-style:none;zoom:1} +#bo_vc_send_sns{display:block;float:left} +#bo_vc_sns {display:block;margin:0;padding:0;list-style:none;zoom:1} #bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""} -#bo_vc_sns li {float:left;margin:0 10px 0 0} -#bo_vc_sns input {margin:0 0 0 5px} \ No newline at end of file +#bo_vc_sns li {float:left;margin:0 5px 0 0} +#bo_vc_sns .sns_li_f{border-radius:3px;background:#3a589b;height:40px;;padding: 10px 0 10px 10px} +#bo_vc_sns .sns_li_t{border-radius:3px;background:#00aced;height:40px;;padding: 10px 0 10px 10px} +#bo_vc_sns .sns_li_off{background:#bbb} +#bo_vc_sns a{display:inline-block;padding:0 15px 0 5px;} +#bo_vc_sns input {margin:0 5px 0 0 } + +/*글쓰기*/ +#bo_w .bo_w_select select{border:1px solid #3497d9;background:#fff;width:100%} +#bo_w .bo_w_link label{position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;background:#eee;text-align:center} +#bo_w .bo_w_link .frm_input{padding-left:50px} +#bo_w .bo_w_flie .lb_icon{position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;background:#eee;text-align:center} +#bo_w .bo_w_flie .frm_file{padding-left:50px;} +#bo_w .bo_w_flie .file_wr{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0} +#bo_w .bo_w_flie .frm_input{margin:5px 0 0 } + diff --git a/mobile/skin/board/basic/view.skin.php b/mobile/skin/board/basic/view.skin.php index daa532271..a2b4fb77b 100644 --- a/mobile/skin/board/basic/view.skin.php +++ b/mobile/skin/board/basic/view.skin.php @@ -8,112 +8,46 @@ add_stylesheet('', 0 -
    + +
    -

    +

    + + + + -

    + ?> + +

    작성일

    페이지 정보

    - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 조회 + 댓글
    - - - -
    -

    첨부파일

    - -
    - - - - - -
    - - - +
    + +

    댓글목록

    @@ -23,54 +25,53 @@ var char_max = parseInt(); // 최대 ?>
    style="margin-left:px;border-top-color:#e0e0e0">
    -

    님의 댓글

    - - 댓글의 댓글 +

    님의 댓글의 댓글

    + + - 아이피 - + 아이피 + () - 작성일 +
    + 작성일
    +
    + +

    + "; ?> + +

    - -

    - "; ?> - -

    + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
    + + "> - - -

    등록된 댓글이 없습니다.

    @@ -83,7 +84,7 @@ var char_max = parseInt(); // 최대 ?> @@ -259,7 +246,10 @@ var char_max = parseInt(); // 최대 function comment_box(comment_id, work) { - var el_id; + var el_id, + form_el = 'fviewcomment', + respond = document.getElementById(form_el); + // 댓글 아이디가 넘어오면 답변, 수정 if (comment_id) { @@ -276,11 +266,13 @@ var char_max = parseInt(); // 최대 if (save_before) { document.getElementById(save_before).style.display = 'none'; - document.getElementById(save_before).innerHTML = ''; } document.getElementById(el_id).style.display = ''; - document.getElementById(el_id).innerHTML = save_html; + document.getElementById(el_id).appendChild(respond); + //입력값 초기화 + document.getElementById('wr_content').value = ''; + // 댓글 수정 if (work == 'cu') { @@ -311,15 +303,26 @@ var char_max = parseInt(); // 최대 comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님) - // sns 등록 $(function() { + // sns 등록 $("#bo_vc_send_sns").load( "/view_comment_write.sns.skin.php?bo_table=", function() { save_html = document.getElementById('bo_vc_w').innerHTML; } ); + + + }); + + $(function() { + //댓글열기 + $(".cmt_btn").click(function(){ + $(this).toggleClass("cmt_btn_op"); + $("#bo_vc").toggle(); + }); + }); diff --git a/mobile/skin/board/basic/write.skin.php b/mobile/skin/board/basic/write.skin.php index 8d9076d2f..31e01e4cf 100644 --- a/mobile/skin/board/basic/write.skin.php +++ b/mobile/skin/board/basic/write.skin.php @@ -6,8 +6,6 @@ add_stylesheet('', 0 ?>
    -

    -
    @@ -51,115 +49,113 @@ add_stylesheet('', 0 echo $option_hidden; ?> -
    - - - +
    +

    + + +
    + + +
    + + -
    - - - +
    + + +
    - - - - +
    + + class="frm_input full_input " maxlength="20" placeholder="비밀번호"> +
    - - - - +
    + + +
    - - - - +
    + + +
    - - - - +
    + 옵션 + +
    - - - - - - +
    + + +
    - - - - +
    + + + +

    이 게시판은 최소 글자 이상, 최대 글자 이하까지 글을 쓰실 수 있습니다.

    + + + + +
    글자
    + +
    - - - - - - - - + + - - - - +
    +
    + + +
    + + + + + + + + + + +
    - - - - - + +
    + 자동등록방지 + + +
    - -
    class="frm_input " maxlength="20">
    옵션
    - -
    - - -

    이 게시판은 최소 글자 이상, 최대 글자 이하까지 글을 쓰실 수 있습니다.

    - - - - -
    글자
    - -
    " id="wr_link" class="frm_input wr_link">
    파일 # - - - - - - - -
    자동등록방지 - -
    -
    - +
    취소 +
    @@ -242,7 +238,7 @@ function fwrite_submit(f) } } - + document.getElementById("btn_submit").disabled = "disabled"; diff --git a/mobile/skin/board/gallery/list.skin.php b/mobile/skin/board/gallery/list.skin.php index 598b13675..4b9e2c65f 100644 --- a/mobile/skin/board/gallery/list.skin.php +++ b/mobile/skin/board/gallery/list.skin.php @@ -8,7 +8,13 @@ add_stylesheet('', 0 -

    목록

    + + +
    @@ -22,19 +28,9 @@ add_stylesheet('', 0 -
    -
    - Total - 페이지 -
    - - - - +
    + 전체 + 페이지
    @@ -60,47 +56,49 @@ add_stylesheet('', 0
  • - - - - - - 열람중"; - else - echo $list[$i]['num']; - ?> - - + 작성자 +
    + 조회 + 추천 + 비추천 + 작성일 +
    +
  • +
    게시물이 없습니다."; } ?> @@ -130,29 +130,20 @@ add_stylesheet('', 0
      -
    • 목록
    • +
    • 목록
    • -
    • -
    • -
    • +
    • +
    • +
    - -
    -
    -
    - - - - - - + echo ''.PHP_EOL; + } + ?> + + + 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. + +
    + 본인확인성인인증 완료 +
    + + + - - - - +
  • + + + + 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    + 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. +
    + + + + +
  • - - - - + + + - - - - +
  • + + " maxlength="255" placeholder="홈페이지"> +
  • - - - - +
  • + + " maxlength="20" placeholder="전화번호"> +
  • - - - - +
  • + + + class="frm_input full_input " maxlength="20" placeholder="휴대폰번호"> + + + + +
  • - - - - +
  • + 주소필수 + + class="frm_input " size="5" maxlength="6" placeholder="우편번호"> +
    + + class="frm_input frm_address " size="50" placeholder="주소">
    + + +
    + + + + +
  • -
    개인정보 입력
    - - 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. - - class="frm_input "> - 아이핀 본인확인'.PHP_EOL; - if($config['cf_cert_hp']) - echo ''.PHP_EOL; +
    + +

    개인정보 입력

    +
  • + + class="frm_input full_input " placeholder="이름"> + 아이핀 본인확인'.PHP_EOL; + if($config['cf_cert_hp'] && $config['cf_cert_hp'] != 'lg') + echo ''.PHP_EOL; - echo ''.PHP_EOL; - } - ?> - -
    - 본인확인성인인증 완료 -
    - -
  • - - 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    - 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. -
    - - - -
    +
  • + + @@ -104,155 +99,170 @@ add_stylesheet('', - -
  • " maxlength="255" >
    " maxlength="20" >
    - class="frm_input " maxlength="20"> - - - -
    - 주소 - 필수 - - - class="frm_input " size="5" maxlength="6"> -
    - - class="frm_input frm_address " size="50">
    - - -
    - - - -
    -
    - - +
    + +

    기타 개인설정

    -
    - - - +
  • + + +
  • - - - - +
  • + + +
  • = $config['cf_icon_level']) { ?> - - - - +
  • + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + 회원아이콘 + + + + +
  • - - - - + = $config['cf_icon_level'] && $config['cf_member_img_size'] && $config['cf_member_img_width'] && $config['cf_member_img_height']) { ?> +
  • + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + 회원아이콘 + + + + +
  • + + +
  • + + >정보 메일을 받겠습니다. + +
  • - - - - + + - - - - +
  • + + > + 다른분들이 나의 정보를 볼 수 있도록 합니다. + + 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. + + + +
  • - - - - +
  • + 정보공개 + + + + 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    + 이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다. +
    + +
  • + + - - - - +
  • + + +
  • - - - - -
    기타 개인설정
    - - 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    - gif만 가능하며 용량 바이트 이하만 등록됩니다. -
    - - - 회원아이콘 - - - -
    - > - 정보 메일을 받겠습니다. -
    - > +
  • + + + > 휴대폰 문자메세지를 받겠습니다. -
  • - - 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. - - - > - 다른분들이 나의 정보를 볼 수 있도록 합니다. -
    정보공개 - - 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    - 이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다. -
    - -
    자동등록방지
    +
  • + 자동등록방지 + +
  • +
    -
    - +
    취소 +
    @@ -288,10 +298,6 @@ add_stylesheet('', $cert_url = G5_KCPCERT_URL.'/kcpcert_form.php'; $cert_type = 'kcp-hp'; break; - case 'lg': - $cert_url = G5_LGXPAY_URL.'/AuthOnlyReq.php'; - $cert_type = 'lg-hp'; - break; default: echo 'alert("기본환경설정에서 휴대폰 본인확인 설정을 해주십시오");'; echo 'return false;'; @@ -412,14 +418,24 @@ add_stylesheet('', if (typeof f.mb_icon != 'undefined') { if (f.mb_icon.value) { - if (!f.mb_icon.value.toLowerCase().match(/.(gif)$/i)) { - alert('회원아이콘이 gif 파일이 아닙니다.'); + if (!f.mb_icon.value.toLowerCase().match(/.(gif|jpe?g|png)$/i)) { + alert('회원아이콘이 이미지 파일이 아닙니다.'); f.mb_icon.focus(); return false; } } } + if (typeof f.mb_img != "undefined") { + if (f.mb_img.value) { + if (!f.mb_img.value.toLowerCase().match(/.(gif|jpe?g|png)$/i)) { + alert("회원이미지가 이미지 파일이 아닙니다."); + f.mb_img.focus(); + return false; + } + } + } + if (typeof(f.mb_recommend) != 'undefined' && f.mb_recommend.value) { if (f.mb_id.value == f.mb_recommend.value) { alert('본인을 추천할 수 없습니다.'); diff --git a/mobile/skin/member/basic/register_result.skin.php b/mobile/skin/member/basic/register_result.skin.php index 44ebe9dd4..fb677f0c1 100644 --- a/mobile/skin/member/basic/register_result.skin.php +++ b/mobile/skin/member/basic/register_result.skin.php @@ -4,41 +4,42 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 // add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨 add_stylesheet('', 0); ?> +
    +

    회원가입이 완료되었습니다.

    +
    +

    + 님의 회원가입을 진심으로 축하합니다.
    +

    -
    + +

    + 회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    + 발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. +

    +
    + 아이디 +
    + 이메일 주소 + +
    +

    + 이메일 주소를 잘못 입력하셨다면, 사이트 관리자에게 문의해주시기 바랍니다. +

    + -

    - 님의 회원가입을 진심으로 축하합니다.
    -

    +

    + 회원님의 비밀번호는 아무도 알 수 없는 암호화 코드로 저장되므로 안심하셔도 좋습니다.
    + 아이디, 비밀번호 분실시에는 회원가입시 입력하신 이메일 주소를 이용하여 찾을 수 있습니다. +

    - -

    - 회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    - 발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. -

    -
    - 아이디 -
    - 이메일 주소 - +

    + 회원 탈퇴는 언제든지 가능하며 일정기간이 지난 후, 회원님의 정보는 삭제하고 있습니다.
    + 감사합니다. +

    -

    - 이메일 주소를 잘못 입력하셨다면, 사이트 관리자에게 문의해주시기 바랍니다. -

    - - -

    - 회원님의 비밀번호는 아무도 알 수 없는 암호화 코드로 저장되므로 안심하셔도 좋습니다.
    - 아이디, 비밀번호 분실시에는 회원가입시 입력하신 이메일 주소를 이용하여 찾을 수 있습니다. -

    - -

    - 회원 탈퇴는 언제든지 가능하며 일정기간이 지난 후, 회원님의 정보는 삭제하고 있습니다.
    - 감사합니다. -

    diff --git a/mobile/skin/member/basic/scrap.skin.php b/mobile/skin/member/basic/scrap.skin.php index ccb43bac5..6ba0a162c 100644 --- a/mobile/skin/member/basic/scrap.skin.php +++ b/mobile/skin/member/basic/scrap.skin.php @@ -5,13 +5,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_stylesheet('', 0); ?> -
    +

    -
      +
      • - + 삭제
      • @@ -22,6 +22,6 @@ add_stylesheet('',
        - +
    diff --git a/mobile/skin/member/basic/scrap_popin.skin.php b/mobile/skin/member/basic/scrap_popin.skin.php index 04dfd5fd3..1b3fc792b 100644 --- a/mobile/skin/member/basic/scrap_popin.skin.php +++ b/mobile/skin/member/basic/scrap_popin.skin.php @@ -5,35 +5,34 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_stylesheet('', 0); ?> -
    +

    스크랩하기

    + +
    +

    제목 확인 및 댓글 쓰기

    +
      +
    • + 제목 + +
    • +
    • + + +
    • +
    + +

    + 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. +

    -
    - - - - - - - - - - - - -
    제목 확인 및 댓글 쓰기
    제목
    +
    + +
    -

    - 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. -

    - -
    - -
    \ No newline at end of file diff --git a/mobile/skin/member/basic/style.css b/mobile/skin/member/basic/style.css index 60bd23600..7d2123881 100644 --- a/mobile/skin/member/basic/style.css +++ b/mobile/skin/member/basic/style.css @@ -1,7 +1,9 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* ### 기본 스타일 커스터마이징 시작 ### */ +.mbskin{text-align:center;padding:10px} +.mbskin h1{font-size:1.75em;margin:40px 0 25px} +.mbskin p {padding-bottom:20px;border-bottom:1px solid #c8c8c8} +.mbskin p strong{color:#4162ff;padding-bottom:5px;display:block;font-size:1.083em} /* 버튼 */ .mbskin a.btn01 {} @@ -73,123 +75,168 @@ /* ### 기본 스타일 커스터마이징 끝 ### */ /* 회원가입 약관 */ -#fregister section {padding:15px;border-bottom:1px solid #eee;background:#fafafa} -#fregister h2 {margin:0 0 15px;text-align:center} -#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:99%;height:150px;border:1px solid #cfded8;background:#f7f7f7} -.fregister_agree {padding:10px 0 0;text-align:right} +#fregister section {background:#fff;margin:10px 0;border:1px solid #dbdbdb; +-webkit-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +-moz-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2);} +#fregister .chk_all{text-align:left} +#fregister h2 {text-align:left;border-bottom:1px solid #dbdbdb;padding:10px 15px;line-height:1.7em;font-size:1.167em} +#fregister textarea {display:block;padding:10px;width:100%;border:0;background:#fff;height:180px;line-height:1.5em;color:#555} +.fregister_agree {border-top:1px solid #dbdbdb;padding:10px 15px;line-height:1.7em;text-align:left;font-size:1.083em} .fregister_agree label {display:inline-block;margin-right:5px} -#fregister p {color:#e8180c;text-align:center} +#fregister p {border:0;padding:0 0 5px;} #fregister .btn_confirm {margin:15px 0} -#fregister_private .tbl_head01 {margin:0} -#fregister_private .tbl_head01 th{;text-align:center;border:1px solid #d1dee2;width:33%} -#fregister_private .tbl_head01 td {border:1px solid #e9e9e9;background:#fff} +#fregister_private .tbl_head01 {padding:20px;margin:0} #fregister_private .tbl_head01 caption{position:absolute;font-size:0;line-height:0;overflow:hidden;top:0;color:#fff} /* 회원가입 입력 */ #fregisterform #reg_mb_email, #fregisterform .frm_address {width:100%} - #fregisterform textarea {width:100%;height:50px} - #fregisterform #msg_certify {margin:5px 0 0;padding:5px;border:1px solid #dbecff;background:#eaf4ff;text-align:center} - #fregisterform .frm_address {margin:5px 0 0} #fregisterform #mb_addr3 {display:block;margin:5px 0 0} #fregisterform #mb_addr_jibeon {display:block;margin:5px 0 0} +#fregisterform .form_01{margin-bottom: 30px} +#fregisterform .form_01 h2{font-size:1.167em;margin:0 0 5px} +#fregisterform .frm_label{display:block;font-size:1.083em;margin:15px 0 5px;color:#555} +#fregisterform .btn_frmline {height:40px;padding:0 10px} +#fregisterform .rgs_name_li button{margin:5px 0 0 } +#fregisterform .reg_mb_img_file img{max-width:100%;height:auto} /* 회원가입 완료 */ -#reg_result {padding:40px 10px 0} +#reg_result {padding:20px 10px 10px} #reg_result #result_email {margin:20px 0;padding:10px 50px;border-top:1px solid #eee;border-bottom:1px solid #eee;background:#fff;line-height:2em} #reg_result #result_email span {display:inline-block;width:150px} #reg_result #result_email strong {color:#e8180c;font-size:1.2em} -#reg_result p {line-height:1.8em} -#reg_result .btn_confirm {margin:50px 0} +#reg_result h2{text-align:center;font-size:1.25em;margin:0 0 10px} +#reg_result h2 strong{color:#ed6478} +#reg_result p {line-height:1.7em} +#reg_result .btn_confirm {margin:20px 0 30px} +#reg_result .reg_result_wr{background:#fff;padding:10px 20px} +#reg_result .reg_cong{margin:10px 0;font-size:1.083em;font-weight:bold} +#reg_result .reg_cong strong{color:#3497d9} +#reg_result .btn_confirm a{display:inline-block;padding:0 20px;height:40px;line-height:38px;border:1px solid #ed6478;color:#ed6478;border-radius:3px;font-weight:bold} /* 아이디/비밀번호 찾기 */ -#find_info #info_fs {margin:0 20px 10px} -#find_info #info_fs p {margin:0 0 10px;line-height:1.8em} +/*#find_info #info_fs {margin:0 20px 10px}*/ +#find_info #info_fs p {margin:0 0 10px;line-height:1.5em;font-size:0.92em;color:#4162ff} #find_info #info_fs #mb_email {width:100%} -#find_info #captcha {margin:0 20px;padding:0 0 10px} -#find_info #captcha input {margin-left:5px} +#find_info #captcha{margin:5px 0 } /* 로그인 */ -#mb_login {margin:20px 0} -#mb_login h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} +#mb_login {margin:40px auto 10px;;max-width:500px;padding:20px;} +#mb_login h1 {font-size:2em;text-align:center;margin:0 0 20px} #mb_login h2 {margin:0} #mb_login p {padding:10px 0;line-height:1.5em} -#mb_login #login_frm {position:relative;padding:0 5px;font-size:1em} -#mb_login #login_frm div {padding:10px 0 0;text-align:right} -#mb_login .frm_input {display:block;margin-bottom:5px;padding:0;width:81%;height:1.8em;line-height:1.8em} -#mb_login .btn_submit {position:absolute;top:0;right:5px;padding:0 !important;width:18%;height:4.3em !important;text-align:center} -#mb_login section {margin:30px 0;padding:15px 10px;border:1px solid #cfded8;background:#f7f7f7} -#mb_login section div {text-align:right} +#mb_login #login_frm {position:relative} +#mb_login #login_frm div {padding:10px 0 ;text-align:right} +#mb_login .frm_input {width:100%;margin:5px 0} +#mb_login .btn_submit {width:100%;border-radius:3px;height:40px;margin:5px 0;font-size:1.083em;font-weight:bold} +#mb_login .mb_login_join{border-top:1px solid #ddd;margin:20px 0 0 ;padding:10px 0} +#mb_login .mb_login_join:after {display:block;visibility:hidden;clear:both;content:""} +#mb_login .mb_login_join h2{position:absolute;font-size:0;line-height:0;overflow:hidden} +#mb_login .mb_login_join a{display:block;float:left;width:50%;} +#login_password_lost{border-right:1px solid #cdcdcd;} +#flogin{background:#fff;padding:20px;margin:20px 0;border-bottom:1px solid #ddd;} + +#mb_login_notmb{background:#fff;border-bottom:1px solid #ccc;padding:20px;} +#mb_login_notmb h2{font-size:1.25em;padding:10px;background:#f3f3f3} +#mb_login_notmb p{border:0;padding:0;margin:10px;color:#} +#guest_privacy p{border:1px solid #ddd;background:#fff;color:#666;min-height:20px;height:200px;padding:10px;text-align:left;overflow-y:auto;margin:10px 0} +#mb_login_notmb .btn_submit{width:100%;display:block;height:40px;line-height:40px} + +#mb_login_od_wr{background:#fff;border-bottom:1px solid #ccc;padding:20px;} +#mb_login_od_wr p{border:0;text-align:left;} +#mb_login_od_wr p strong{display:inline} +#mb_login_odinfo{margin:10px 0 0 ;background:#f3f3f3;padding:10px} +#mb_login_odinfo h2{font-size:1.167em} /* 쪽지 */ -#memo_view_contents {margin:0 auto 20px;width:90%} -#memo_view_contents h1 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#memo_view_ul {margin:0;padding:0 0 10px;border-bottom:1px solid #eee;list-style:none} -.memo_view_li {position:relative;padding:5px 0} -.memo_view_subj {display:inline-block;width:65px} +#memo_view_contents {} +#memo_view_contents h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#memo_view_ul {margin:0 0 3px;background:#fff;padding:5px 10px;border-radius:3px; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} +.memo_view_li {position:relative;padding:2px 0} +.memo_view_subj {display:inline-block;width:60px;font-size:0.92em;color:#777} #memo_view_ul a {} -#memo_view p {padding:10px 0;min-height:150px;height:auto !important;height:150px;line-height:1.8em} +#memo_view p {padding:10px 15px;border-radius:3px;;min-height:150px;height:auto !important;height:150px;line-height:1.8em;background:#fff; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} -#memo_list_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#memo_list_ul li {position:relative;padding:10px 0;border-bottom:1px solid #e9e9e9} -#memo_list_ul .memo_link {} -#memo_list_ul .memo_send {display:block;margin-top:4px} -#memo_list_ul .memo_send a{color:#777} -#memo_list_ul .memo_read {font-size:0.95em;color:#666} -#memo_list_ul .memo_del {position:absolute;top:10px;right:0} +#memo_list_ul {} +#memo_list_ul li {position:relative;background:#fff;margin:10px 0;border-radius:3px;padding:10px 15px; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} -#memo_write #me_recv_mb_id {width:98%} -#memo_write textarea {width:99%;height:100px} +#memo_list_ul .memo_link {display:block;font-weight:bold;font-size:1.083em;margin:0 0 5px} +#memo_list_ul .memo_date{font-size:0.92em;color:#777;font-style:italic} +#memo_list_ul .memo_del{display:block;position:absolute;top:0;right:0;width:40px;height:40px;background:url(./img/btn_del.gif) no-repeat 50% 50%; text-indent:-9999px;overflow:hidden} + +#memo_write #me_recv_mb_id {width:100%} +#memo_write textarea {width:100%;height:100px} +#memo_write .win_btn{margin:10px;} /* 스크랩 */ -#scrap_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#scrap_ul li {position:relative;padding:10px 35px 10px 0;border-bottom:1px solid #e9e9e9} -#scrap_ul .scrap_board {display:inline-block;margin:0 10px 0 0;font-weight:bold} -#scrap_ul .scrap_del {position:absolute;top:10px;right:0} - -#scrap_do table {margin:0 0 10px;width:100%} -#scrap_do textarea {width:99%;height:100px} +#scrap_ul li{position:relative;} +#scrap_ul .scrap_board {display:block;color:#4162ff;margin:0 0 5px} +#scrap_ul .scrap_del {display:block;position:absolute;top:0;right:0;width:40px;height:40px;background:url(./img/btn_del.gif) no-repeat 50% 50%; text-indent:-9999px;overflow:hidden} +#scrap_ul .scrap_link{font-weight:bold;font-size:1.083em;} +.scrap_tit{font-weight:bold;border-bottom:1px solid #d7d7d7;padding:0 0 10px;font-size:1.167em} +#scrap_do #wr_content{margin-top:5px} +#scrap_do label{color:#666} /* 포인트 */ -#point_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#point_ul li {position:relative;padding:10px 0;border-bottom:1px solid #e9e9e9} -#point_ul .point_wrap01 {position:relative;padding:0 0 0 90px} -#point_ul .point_wrap02 {margin:7px 0 0;text-align:right} -#point_ul .point_date {position:absolute;top:0;left:0} +#point_ul {;padding:0;border-top:1px solid #e9e9e9;list-style:none} +#point_ul li {position:relative;} +#point_ul li:after {display:block;visibility:hidden;clear:both;content:""} +#point_ul .point_wrap01 {float:left} +#point_ul .point_wrap02 {float:right;text-align:right} +#point_ul .point_log{display:block;font-weight:bold;margin:0 0 5px;font-size:1.083em} +#point_ul .point_inout{display:block;font-weight:bold;margin:0 0 5px;color:#4162ff;font-size:1.083em} +#point_ul .point_date{font-style:italic} -#point_sum {margin:0 20px} -#point_sum .sum_row {margin:0 0 1px;background:#f2f5f9} -#point_sum .sum_row:after {display:block;visibility:hidden;clear:both;content:''} +#point_sum{margin:10px 0 20px} +#point_sum:after {display:block;visibility:hidden;clear:both;content:''} +#point_sum .sum_row {float:left;width:33.333%;text-align:center;background:#939db8;color:#fff;} +#point_sum .sum_row:nth-child(even){background:#8490af} #point_sum .sum_tit, #point_sum .sum_val {display:block;margin:0 0 1px;padding:10px} -#point_sum .sum_tit {clear:both;float:left;width:100px} -#point_sum .sum_val {float:right} +#point_sum .sum_tit {} +#point_sum .sum_val {} /* 회원 비밀번호 확인 */ #mb_confirm {margin:30px 0} #mb_confirm h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} #mb_confirm p {padding:15px 10px;border-bottom:1px solid #cfded8;border-bottom:0;background:#fff} #mb_confirm p strong {display:block} -#mb_confirm fieldset {position:relative;margin:0 0 5px;padding:20px 10px;border-bottom:1px solid #cfded8;background:#f7f7f7} -#mb_confirm_pw {display:block;margin-top:10px;padding:0;width:88%;line-height:1.8em !important} -#mb_confirm .btn_submit {position:absolute;bottom:20px;right:10px;width:10%;height:1.9em !important;line-height:1.9em} +#mb_confirm fieldset {position:relative;margin:20px 0;text-align:left;color:#555} +#mb_confirm_id{font-weight:bold;display:block;font-size:1.083em;margin:5px 0} +#mb_confirm_pw {display:block;margin-top:10px;width:100%} +#mb_confirm .btn_submit {width:100%;height:40px;border-radius:3px;margin:10px 0} /* 비밀글 비밀번호 확인 */ -#pw_confirm {margin:30px 0} -#pw_confirm h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} -#pw_confirm p {padding:15px 10px;border-bottom:1px solid #cfded8;border-bottom:0;background:#fff} -#pw_confirm p strong {display:block} -#pw_confirm fieldset {position:relative;margin:0 0 5px;padding:5px 5px 10px;border-bottom:1px solid #cfded8;background:#f7f7f7} -#pw_wr_password {display:block;margin-top:10px;padding:0;width:88%;line-height:1.8em !important} -#pw_confirm .btn_submit {position:absolute;bottom:10px;right:5px;width:10%;height:1.9em !important;line-height:1.9em} +#pw_confirm fieldset {position:relative;margin:0 0 5px;padding:15px 0;border-top:1px solid #fffefe} +#pw_wr_password {width:100%} +#pw_confirm .btn_submit {margin:5px 0;width:100%;border-radius:3px;height:45px;font-weight:bold;font-size:1.083em} /* 폼메일 */ -#formmail #subject {width:98%} -#formmail textarea {width:99%;height:100px} +#formmail #subject {width:100%} +#formmail textarea {width:100%;height:100px} +#formmail .frm_file{padding-left:50px;} +#formmail .file_wr{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;} +#formmail .lb_icon{position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;overflow:hidden;text-indent:-999px;background:url(./img/icon_file.gif) no-repeat 50% 50% #eee} /* 자기소개 */ -#profile table {margin-bottom:0} -#profile section {padding:10px 20px} +#profile section {margin:10px; } #profile h2 {margin:0} -#profile .sv_wrap a {margin:0 0 5px;padding:0;font-weight:bold;line-height:10px} \ No newline at end of file +#profile .sv_wrap a {color:#fdff2f} +#profile table{width:100%;border-collapse:collapse} +#profile table th{background:#fff;padding:10px;width:90px;text-align:left;border-bottom:1px solid #eee} +#profile table td{background:#fff;padding:10px;border-bottom:1px solid #eee} +#profile p{background:#fff;padding:10px;margin:10px 0; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} \ No newline at end of file diff --git a/mobile/skin/new/basic/new.skin.php b/mobile/skin/new/basic/new.skin.php index 9055d2b52..e7263f92f 100644 --- a/mobile/skin/new/basic/new.skin.php +++ b/mobile/skin/new/basic/new.skin.php @@ -16,8 +16,8 @@ add_stylesheet('', 0);
    + + +
    - - - - - -
    -

    연락처정보

    -
    - -
    이메일
    -
    - - -
    휴대폰
    -
    - -
    -
    - - +
    -
    -

    본문

    - - \n"; - - for ($i=0; $i<$view['img_count']; $i++) { - //echo $view['img_file'][$i]; - echo get_view_thumbnail($view['img_file'][$i], $qaconfig['qa_image_width']); - } - - echo "
    \n"; - } - ?> - - -
    - - - - - - - - ', 0);

    연관질문

    -
    - - - - - - - - - - +
    + +
      -
    - - - - - - - -
    분류제목상태등록일
    - - - -
    + for($i=0; $i<$view['rel_count']; $i++) { + ?> +
  • +
    + + + + + +
    +
    + + +
    +
  • + +
    - -
    - -
    - + diff --git a/mobile/skin/qa/basic/write.skin.php b/mobile/skin/qa/basic/write.skin.php index adbcbdfbb..3d19ca931 100644 --- a/mobile/skin/qa/basic/write.skin.php +++ b/mobile/skin/qa/basic/write.skin.php @@ -27,92 +27,82 @@ add_stylesheet('', 0); echo $option_hidden; ?> -
    - - - - - - - - + + - - - - - - + +
  • + 옵션 + +
  • + - - - - - - + + - - - - - - + + - - - - +
  • + + +
  • - - - - +
  • + +
    + +
    +
  • - - - - +
  • +
    + 파일 #1 + + + + +
    +
  • - - - - +
  • +
    + 파일 #2 + + + + +
    +
  • - -
    +
    +
      + +
    • + -
    옵션
    - class="frm_input email" maxlength="100"> + +
  • + + class="frm_input full_input email" maxlength="100" placeholder="이메일"> > -
  • - class="frm_input" size="30"> + +
  • + + class="frm_input full_input" size="30" placeholder="휴대폰"> > 답변등록 SMS알림 수신 -
  • - -
    - -
    파일 #1 - - - - -
    파일 #2 - - - - -
    +
    -
    - - 목록 +
    + 목록 +
    diff --git a/mobile/skin/search/basic/search.skin.php b/mobile/skin/search/basic/search.skin.php index c1ae64ec8..d4229ec77 100644 --- a/mobile/skin/search/basic/search.skin.php +++ b/mobile/skin/search/basic/search.skin.php @@ -9,7 +9,7 @@ add_stylesheet('',
    상세검색 -
    +
    @@ -21,11 +21,10 @@ add_stylesheet('', -
    -
    + - - + + + + +
    +
    \ No newline at end of file diff --git a/mobile/skin/social/social_outlogin.skin.1.php b/mobile/skin/social/social_outlogin.skin.1.php new file mode 100644 index 000000000..43260475d --- /dev/null +++ b/mobile/skin/social/social_outlogin.skin.1.php @@ -0,0 +1,85 @@ +', 10); +?> + + \ No newline at end of file diff --git a/mobile/skin/social/social_register.skin.php b/mobile/skin/social/social_register.skin.php new file mode 100644 index 000000000..66ee7d886 --- /dev/null +++ b/mobile/skin/social/social_register.skin.php @@ -0,0 +1,87 @@ +', 10); +?> +
    + +
    \ No newline at end of file diff --git a/mobile/skin/social/social_register_member.skin.php b/mobile/skin/social/social_register_member.skin.php new file mode 100644 index 000000000..e0a150434 --- /dev/null +++ b/mobile/skin/social/social_register_member.skin.php @@ -0,0 +1,201 @@ +', 11); +add_stylesheet('', 12); +add_stylesheet('', 13); +add_javascript('', 10); + +$email_msg = $is_exists_email ? '등록할 이메일이 중복되었습니다.다른 이메일을 입력해 주세요.' : ''; +?> + + +
    + + + + +
    + + + + + + + + + + +
    +
    + 자세히보기 + +
    +
    +

    +
    +
    +
    +
    + 자세히보기 + +
    +
    +

    +
    +
    +
    + +
    + +
    + + + + + + + + + +
    개인정보 입력
    + + +
    +
    + +
    + 취소 + +
    +
    + + + + + + +
    +

    혹시 기존 회원이신가요?

    + +
    + + + + + +
    + \ No newline at end of file diff --git a/mobile/skin/social/social_u_register_form.skin.php b/mobile/skin/social/social_u_register_form.skin.php new file mode 100644 index 000000000..c9a14c752 --- /dev/null +++ b/mobile/skin/social/social_u_register_form.skin.php @@ -0,0 +1,167 @@ +', 10); +?> + +
  • + +
    +
    + + $provider_name ){ + + if( !option_array_checked($social, $config['cf_social_servicelist'])) { + continue; + } + + $social_nonce = social_nonce_create($social, $session_id); + $add_class=''; + $title=''; + if( in_array($social, $my_provides) ){ + + $link_href = G5_SOCIAL_LOGIN_URL.'/unlink.php?provider='.$social.'&social_nonce='.$social_nonce; + + $title = $provider_name.' 연결해제하기'; + } else { + $add_class = ' sns-icon-not'; + + $link_href = $self_url.'?provider='.$social.'&mylink=1&url='.$urlencode; + + $title = $provider_name.' 연결하기'; + + } + ?> + + + + + +
    +
    +
  • + + \ No newline at end of file diff --git a/mobile/skin/social/style.css b/mobile/skin/social/style.css new file mode 100644 index 000000000..10c35de0f --- /dev/null +++ b/mobile/skin/social/style.css @@ -0,0 +1,155 @@ +@charset "utf-8"; + +.social_info_guide{background:#f3f3f3;border:1px solid #ddd;margin:0 10px 10px;padding:10px 15px;line-height:1.5em} +.bg-warning{margin:0 10px 10px;padding:10px 15px;line-height:1.5em} +.bg-warning1{background:#f7dfe4;border:1px solid #eac3cb} +.bg-warning2{background:#deeabf;border:1px solid #bde498} +.bg-warning3{background:#fff8dc;border:1px solid #f1e4b2} + +/* SNS LOGIN */ +.login-sns{padding-bottom:10px;margin-top:5px;;clear:both;} +.login-sns h3{padding-top:10px;text-align:center;color:#b2b2b2;;margin-top:15px;font-weight:normal} +.sns-wrap {margin:10px 0 0;text-align:center} +.sns-icon {display:inline-block;vertical-align:middle;text-decoration:none} +.sns-icon:hover {text-decoration:none} +.sns-icon .ico {display:block;vertical-align:middle} +.sns-icon .txt i {font-style:normal} + +#fregisterform .form_01 .reg-form {margin-bottom:20px} +#fregisterform .form_01 .reg-form .sns-wrap {margin:10px 0 0;text-align:left} +.reg-form .sns-icon {display:inline-block;vertical-align:middle;text-decoration:none;border-width:1px;border-style:solid;overflow:hidden;margin:0 1px} +.reg-form .sns-icon:hover {text-decoration:none} +.reg-form .sns-icon .ico {display:block;background:url('./img/sns_logo.png') no-repeat;vertical-align:middle;width:24px;height:24px} +.reg-form .sns-icon-not .ico {display:block;background:url('./img/sns_logo_not.png') no-repeat;vertical-align:middle} +.reg-form .sns-icon .txt {position:absolute;line-height:0;font-size:0;vertical-align:middle;overflow:hidden} +.reg-form .sns-icon .txt i {font-style:normal} + +.sns-wrap-reg .sns-naver {border-color:#18a400;background:#2db400} +.sns-wrap-reg .sns-naver .ico {background-position:-29px 0; } +.sns-wrap-reg .sns-google {border-color:#ca2c19;background:#dd5443} +.sns-wrap-reg .sns-google .ico {background-position:-58px 0} +.sns-wrap-reg .sns-facebook {border-color:#2e5393;background:#3a5897} +.sns-wrap-reg .sns-facebook .ico {background-position:0 0 } + +.sns-wrap-reg .sns-icon {border-color:#dcdcdc} +.sns-wrap-reg .sns-icon-not {border-color:#8b8b8b} +.sns-wrap-reg .sns-naver{border-color:#18a400} +.sns-wrap-reg .sns-naver .ico {background-position:-29px 0; } +.sns-wrap-reg .sns-google .ico {background-position:-58px 0} +.sns-wrap-reg .sns-google {border-color:#ca2c19} +.sns-wrap-reg .sns-facebook .ico {background-position:0 0 } +.sns-wrap-reg .sns-facebook {border-color:#2e5393} +.sns-wrap-reg .sns-kakao .ico {background-position:-87px 0} +.sns-wrap-reg .sns-twitter {border-color:#488FC9} +.sns-wrap-reg .sns-twitter .ico {background-position:-145px 0} +.sns-wrap-reg .sns-payco {border-color:#C44646} +.sns-wrap-reg .sns-payco .ico {background-position:-116px 0} +.sns-wrap-reg .sns-kakao {border-color:#f2df00} + +/* SNS by COLOR */ +.sns-wrap-over .sns-naver{background:url('./img/sns_naver_s.png') no-repeat} +.sns-wrap-over .sns-google {background:url('./img/sns_gp_s.png') no-repeat} +.sns-wrap-over .sns-facebook {background:url('./img/sns_fb_s.png') no-repeat} +.sns-wrap-over .sns-twitter {background:url('./img/sns_twitter_s.png') no-repeat} +.sns-wrap-over .sns-payco {background:url('./img/sns_payco_s.png') no-repeat} +.sns-wrap-over .sns-kakao {background:url('./img/sns_kakao_s.png') no-repeat} +.reg-form .sns-icon-not {border-color:#8b8b8b} + + +/* 아웃로그인 */ +#sns_outlogin {clear:both;} +#sns_outlogin .sns-icon {overflow:hidden;margin:0 1px} +#sns_outlogin .sns-icon .txt {position:absolute;line-height:0;font-size:0;vertical-align:middle;overflow:hidden} +#sns_outlogin .sns-icon .ico {width:30px;height:30px} + +/*로그인 */ +#sns_login{border:0;margin-top:15px;padding:0; border-top:1px solid #edeaea} +#sns_login h3{padding: 0;font-weight:bold;color:#888;text-align:center} +#sns_login .sns-icon{display:block;height:40px;line-height:40px;width:100%;margin:0 0 5px;padding-left:40px;text-align:left;color:#fff;border-radius:2px} +#sns_login .sns-naver{background-color:#1fc800;background-position:5px 5px;border-bottom:1px solid #1ea505} +#sns_login .sns-kakao{background-color:#ffeb00;background-position:5px 5px;border-bottom:1px solid #e2c10a} +#sns_login .sns-kakao {color:#3c1e1e} +#sns_login .sns-facebook{background-color:#3b579d;background-position:5px 5px;border-bottom:1px solid #28458f} +#sns_login .sns-google{background-color:#db4a3a;background-position:5px 5px;border-bottom:1px solid #c03121} +#sns_login .sns-twitter{background-color:#1ea1f2;background-position:5px 5px;border-bottom:1px solid #1e82c0} +#sns_login .sns-payco{background-color:#df0b00;background-position:5px 5px;border-bottom:1px solid #9d0800} +#sns_login .txt{text-align:left;padding-left:10px;border-left:1px solid rgba(0,0,0,0.1);display:block;font-weight:bold} + +/*회원가입 */ +#sns_register{margin:0 0 10px;padding:0;text-align:center;background:#fff;border: 1px solid #dbdbdb; +-webkit-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +-moz-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2);} +#sns_register h2{font-size: 1.167em;text-align: left;padding: 15px 20px;border-bottom: 1px solid #dbdbdb;} +#sns_register .sns-wrap:after {display:block;visibility:hidden;clear:both;content:""} +#sns_register .sns-wrap{display:inline-block;padding:20px;vertical-align:top;margin:0} +#sns_register .sns-icon{display:inline-block;height:40px;line-height:40px;width:100%;margin:0 0 5px;padding-left:40px;text-align:left;color:#fff;border-radius:2px;float:left} +#sns_register .sns-icon:nth-child(3n+1){clear:both} +#sns_register .sns-naver{background-color:#1fc800;background-position:5px 5px;border-bottom:1px solid #1ea505} +#sns_register .sns-kakao{background-color:#ffeb00;background-position:5px 5px;border-bottom:1px solid #e2c10a} +#sns_register .sns-kakao {color:#3c1e1e} +#sns_register .sns-facebook{background-color:#3b579d;background-position:5px 5px;border-bottom:1px solid #28458f} +#sns_register .sns-google{background-color:#db4a3a;background-position:5px 5px;border-bottom:1px solid #c03121} +#sns_register .sns-twitter{background-color:#1ea1f2;background-position:5px 5px;border-bottom:1px solid #1e82c0} +#sns_register .sns-payco{background-color:#df0b00;background-position:5px 5px;border-bottom:1px solid #9d0800} +#sns_register .txt{text-align:;padding-left:10px;border-left:1px solid rgba(0,0,0,0.1);display:block;font-weight:bold} + + +/* LOGIN LOADING */ +.social-login-loading{width:100%;height:auto;text-align:center} +.social-login-loading p{display:inline-block;margin-top:10px;padding:40px 0 0;line-height:30px} + +/*기존 계정에 연결하기*/ + +/* Styles for Accordion */ +.mbskin .toggle{position:relative;display:block;border:1px solid #c6cacc;margin-top:-1px;background-color: #fcfcfc;margin:0 0 5px} +.mbskin .toggle .toggle-title{padding:13px 15px;line-height:20px} +.mbskin .toggle .title-name{display:block} +.mbskin .toggle .toggle-inner{padding:15px;line-height:1.5em;display:none;background:#fff;border-top:1px solid #e2e2e2;} +.mbskin .toggle .toggle-inner div{max-width:100%} +.mbskin .right_i{position:absolute;font-size:0.92em;top:10px;right:10px;padding:0 10px 0 0;border-radius:3px;display:inline-block;z-index: 2;background: #3497d9;color: #fff;border-bottom-color: #1977b5;} +.mbskin .toggle .toggle-title .right_i i{background:url("./img/plus_minus.png") 0 -24px no-repeat;width:20px;height:24px;display:inline-block;vertical-align:middle} +.mbskin .toggle .toggle-title.active .right_i i{background:url("./img/plus_minus.png") 0 0 no-repeat} +.mbskin .all_agree{position:relative;display:block;;margin-bottom:6px;background:#d9d9d9;border-radius:3px;border-top:0;padding:13px 15px;line-height:20px} + +#register_member .sns_tbl{background:#fff;;margin:10px 0;border:1px solid #c6cacc;} +.sns_tbl table{border:0} +.sns_tbl caption{ padding: 0 20px;line-height: 45px;font-size: 1.083em;border-bottom: 1px solid #e2e2e2;color:#4162ff;background: #fff;} +.sns_tbl th{width:80px;text-align:right;vertical-align:top;line-height:40px;padding:10px;} +.sns_tbl td{padding:10px;} +.sns_tbl .email_msg{color:#777;margin:5px 0 0} +.sns_tbl .frm_input {width:100%} +#fregisterform{margin:10px} +#fregisterform .btn_confirm{text-align:center;margin:20px 0} +#fregisterform .btn_confirm .btn_submit{height:45px;;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .btn_confirm .btn_cancel{line-height:45px;height:45px;padding:0 30px;font-weight:bold;font-size:1.083em} + +#sns-link-pnl.remodal{border-radius:5px;max-width:400px; +-webkit-box-shadow:0 0 10px rgba(0, 0, 0,0.8); +-moz-box-shadow:0 0 10px rgba(0, 0, 0,0.8); +box-shadow:0 0 10px rgba(0, 0, 0,0.8);} +#sns-link-pnl .connect-close {position:absolute;top:10px;right:10px;margin:0;padding:0;width:30px;height:30px;border:0;background:transparent;color:#383838;cursor:pointer;font-size:15px} +#sns-link-pnl .connect-close:hover {color:#ff5191} +#sns-link-pnl .connect-close .fa {margin:0 0 0 1px} +#sns-link-pnl .connect-close .txt {position:absolute;line-height:0;font-size:0;overflow:hidden} + +#sns-link-pnl #login_fs{margin:0 auto;width:100%;text-align:left} +#sns-link-pnl #login_fs label{display:block;display: block;font-size: 0.93em;color: #7a7a7a;margin: 5px 0;} +#sns-link-pnl #login_fs .lg_id,#sns-link-pnl #login_fs .lg_pw{width:100%;margin-bottom:5px;} +#sns-link-pnl #login_id,#sns-link-pnl #login_pw{width:100%} +#sns-link-pnl #login_fs .login_submit{width: 100%;height: 44px;font-size:1.167em;margin:10px auto 0;font-weight:bold;cursor:pointer;display:block;} +#sns-link-pnl .connect-fg {height:320px;text-align:left} +#sns-link-pnl .login_fs {margin:0 auto;width:260px} +#sns-link-pnl .connect-fg .connect-desc {margin:0 0 10px;padding:15px;border:1px solid #d6e9c6;background:#dff0d8;color:#3c763d} +#sns-link-pnl .connect-fg .connect-title {margin-top:25px;margin-bottom:10px;font-size:1.667em;font-weight:bold;text-align:center} + +.mbskin .member_connect:after {display:block;visibility:hidden;clear:both;content:""} +.mbskin .member_connect{margin-top:1em;border: 2px solid #cacaca;margin:10px;padding:10px;text-align:left} +.mbskin .member_connect .strong{font-weight:bold;margin:0 0 10px;font-size:0.97em} +.mbskin .member_connect button{color: #fff;border:0;padding:7px 13px;border:1px solid #6446e7;font-weight:bold;background: #6f50e7;border-radius:3px;font-size:0.92em} +.mbskin .member_connect button:hover{background:#6446e7} + +.mbskin .btn_group_trigger{margin:10px;text-align:center} +.mbskin .btn_group_trigger .btn_submit_trigger{display:inline-block;height:45px;line-height:45px;color:#fff;padding:0 30px;font-weight:bold;font-size:1.083em;background:#253dbe} + +.mbskin .member_connect{margin-top:50px} \ No newline at end of file diff --git a/mobile/skin/visit/basic/style.css b/mobile/skin/visit/basic/style.css index 5a9c00719..26ee1ad6e 100644 --- a/mobile/skin/visit/basic/style.css +++ b/mobile/skin/visit/basic/style.css @@ -1,11 +1,15 @@ @charset "utf-8"; -/* SIR 지운아빠 */ -#visit {border-bottom:1px dotted #dde4e9} -#visit div {zoom:1} -#visit div:after {display:block;visibility:hidden;clear:both;content:""} -#visit h2 {float:left;padding:10px} -#visit dl {float:left;margin:0 0 0 5px;padding:0} -#visit dt {float:left;margin:0;padding:10px 5px;letter-spacing:-0.1em} -#visit dd {float:left;margin:0 3px 0 0;padding:10px 5px} +#visit {margin:30px 10px} +#visit h2 {display:inline-block;background: #4162ff;color: #fff;border-radius: 13px;line-height: 24px;padding: 0 10px;margin:0 0 10px; +-webkit-box-shadow: 0 0 5px rgba(65,98,255,0.8); +-moz-box-shadow: 0 0 5px rgba(65,98,255,0.8); +box-shadow: 0 0 8px rgba(65,98,255,0.8); } +#visit dl{background:#fff;padding:10px;border-radius:3px;line-height:20px; +-webkit-box-shadow: 0 1px 4px #cbd1df; + -moz-box-shadow: 0 1px 4px #cbd1df; + box-shadow: 0 1px 4px #cbd1df;} +#visit dl:after {display:block;visibility:hidden;clear:both;content:""} +#visit dt {float:left;width:50%} +#visit dd {float:left;width:50%;text-align:right} #visit a {display:inline-block;padding:10px 3px;text-decoration:none} \ No newline at end of file diff --git a/mobile/skin/visit/basic/visit.skin.php b/mobile/skin/visit/basic/visit.skin.php index 04027bdec..3e4bf3430 100644 --- a/mobile/skin/visit/basic/visit.skin.php +++ b/mobile/skin/visit/basic/visit.skin.php @@ -8,18 +8,16 @@ add_stylesheet('', 0 ?> diff --git a/mobile/tail.php b/mobile/tail.php index 3a7ef7018..74335a2af 100644 --- a/mobile/tail.php +++ b/mobile/tail.php @@ -9,15 +9,13 @@ if(defined('G5_THEME_PATH')) {
    -
    + + -
    - -
    회사소개 @@ -25,25 +23,50 @@ if(defined('G5_THEME_PATH')) { 서비스이용약관
    Copyright © 소유하신 도메인. All rights reserved.
    - 상단으로
    + + + PC 버전으로 보기 +
    - -PC 버전으로 보기 - diff --git a/plugin/editor/smarteditor2/css/smart_editor2.css b/plugin/editor/smarteditor2/css/smart_editor2.css index 6fde2758d..881272d8d 100644 --- a/plugin/editor/smarteditor2/css/smart_editor2.css +++ b/plugin/editor/smarteditor2/css/smart_editor2.css @@ -3,6 +3,7 @@ /* COMMON */ body,#smart_editor2,#smart_editor2 p,#smart_editor2 h1,#smart_editor2 h2,#smart_editor2 h3,#smart_editor2 h4,#smart_editor2 h5,#smart_editor2 h6,#smart_editor2 ul,#smart_editor2 ol,#smart_editor2 li,#smart_editor2 dl,#smart_editor2 dt,#smart_editor2 dd,#smart_editor2 table,#smart_editor2 th,#smart_editor2 td,#smart_editor2 form,#smart_editor2 fieldset,#smart_editor2 legend,#smart_editor2 input,#smart_editor2 textarea,#smart_editor2 button,#smart_editor2 select{margin:0;padding:0} #smart_editor2,#smart_editor2 h1,#smart_editor2 h2,#smart_editor2 h3,#smart_editor2 h4,#smart_editor2 h5,#smart_editor2 h6,#smart_editor2 input,#smart_editor2 textarea,#smart_editor2 select,#smart_editor2 table,#smart_editor2 button{font-family:'돋움',Dotum,Helvetica,sans-serif;font-size:12px;color:#666} +#smart_editor2{background:#fff} #smart_editor2 span,#smart_editor2 em{font-size:12px} #smart_editor2 em,#smart_editor2 address{font-style:normal} #smart_editor2 img,#smart_editor2 fieldset{border:0} diff --git a/plugin/jquery-ui/datepicker.php b/plugin/jquery-ui/datepicker.php index f351816bc..18988b2d8 100644 --- a/plugin/jquery-ui/datepicker.php +++ b/plugin/jquery-ui/datepicker.php @@ -1,11 +1,11 @@ ', 0); +add_stylesheet('', 0); add_stylesheet('', 0); ?> - + '; + $html .= ''; + $html .= '
    '; + $html .= ''; + + return $html; +} + +// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 +function chk_captcha_js() +{ + return "if (!chk_captcha()) return false;\n"; +} + +function chk_captcha(){ + + global $config; + + $resp = null; + + if ( isset($_POST["g-recaptcha-response"]) && !empty($_POST["g-recaptcha-response"]) ) { + + $reCaptcha = new ReCaptcha_GNU( $config['cf_recaptcha_secret_key'] ); + + $resp = $reCaptcha->verify($_POST["g-recaptcha-response"], $_SERVER["REMOTE_ADDR"]); + } + + if( ! $resp ){ + return false; + } + + if ($resp != null && $resp->success) { + return true; + } + + return false; +} +?> \ No newline at end of file diff --git a/plugin/recaptcha_inv/_common.php b/plugin/recaptcha_inv/_common.php new file mode 100644 index 000000000..bad54a5d7 --- /dev/null +++ b/plugin/recaptcha_inv/_common.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugin/recaptcha_inv/captcha.lib.php b/plugin/recaptcha_inv/captcha.lib.php new file mode 100644 index 000000000..9eec82f03 --- /dev/null +++ b/plugin/recaptcha_inv/captcha.lib.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/plugin/recaptcha_inv/recaptcha.class.php b/plugin/recaptcha_inv/recaptcha.class.php new file mode 100644 index 000000000..781c13d3c --- /dev/null +++ b/plugin/recaptcha_inv/recaptcha.class.php @@ -0,0 +1,147 @@ +secret = $secret; + } + + public function get_content($url, $data=array()) { + + $curlsession = curl_init(); + curl_setopt ($curlsession, CURLOPT_URL, $url); + curl_setopt ($curlsession, CURLOPT_POST, 1); + curl_setopt ($curlsession, CURLOPT_POSTFIELDS, http_build_query($data, '', '&')); + curl_setopt ($curlsession, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); + curl_setopt ($curlsession, CURLINFO_HEADER_OUT, false); + curl_setopt ($curlsession, CURLOPT_HEADER, false); + curl_setopt ($curlsession, CURLOPT_RETURNTRANSFER, 1); + curl_setopt ($curlsession, CURLOPT_SSL_VERIFYPEER, 1); + curl_setopt ($curlsession, CURLOPT_TIMEOUT, 3); + + $response = curl_exec($curlsession); + $cinfo = curl_getinfo($curlsession); + curl_close($curlsession); + + if ($cinfo['http_code'] != 200){ + return ''; + } + return $response; + } + + /** + * Submits an HTTP GET to a reCAPTCHA server. + * + * @param string $path url path to recaptcha server. + * @param array $data array of parameters to be sent. + * + * @return array response + */ + private function submit($url, $data) + { + $response = $this->get_content($url, $data); + return $response; + } + + /** + * Calls the reCAPTCHA siteverify API to verify whether the user passes + * CAPTCHA test. + * + * @param string $remoteIp IP address of end user. + * @param string $response response string from recaptcha verification. + * + * @return ReCaptchaResponse_v + */ + public function verify($response, $remoteIp = null) + { + // Discard empty solution submissions + if ($response == null || strlen($response) == 0) { + $recaptchaResponse = new ReCaptchaResponse_v(); + $recaptchaResponse->success = false; + $recaptchaResponse->errorCodes = 'missing-input'; + return $recaptchaResponse; + } + $getResponse = $this->submit( + self::$_siteVerifyUrl, + array ( + 'secret' => $this->secret, + 'remoteip' => $remoteIp, + 'version' => self::VERSION, + 'response' => $response + ) + ); + $answers = $getResponse ? json_decode($getResponse, true) : array(); + $recaptchaResponse = new ReCaptchaResponse_v(); + if (isset($answers['success']) && $answers['success'] == true) { + $recaptchaResponse->success = true; + } else { + $recaptchaResponse->success = false; + $recaptchaResponse->errorCodes = isset($answers['error-codes']) ? $answers['error-codes'] : 'http_error'; + } + return $recaptchaResponse; + } +} +?> \ No newline at end of file diff --git a/plugin/recaptcha_inv/recaptcha.js b/plugin/recaptcha_inv/recaptcha.js new file mode 100644 index 000000000..8aac8389f --- /dev/null +++ b/plugin/recaptcha_inv/recaptcha.js @@ -0,0 +1,20 @@ +function chk_captcha() +{ + if ( ! jQuery('#g-recaptcha-response').val()) { + grecaptcha.execute(); + return false; + } + + return true; +} + +function recaptcha_validate(token) { + var $form = jQuery("#g-recaptcha-response").closest("form"), + form_id = $form.attr("id"); + + + if( $form.length ){ + $form.submit(); + } + +} diff --git a/plugin/recaptcha_inv/recaptcha.user.lib.php b/plugin/recaptcha_inv/recaptcha.user.lib.php new file mode 100644 index 000000000..cd6e6bcc4 --- /dev/null +++ b/plugin/recaptcha_inv/recaptcha.user.lib.php @@ -0,0 +1,52 @@ +'; + $html .= ''; + $html .= ''; + $html .= '
    '; + $html .= ''; + $html .= ''; + + return $html; +} + +// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 +function chk_captcha_js() +{ + return "if (!chk_captcha()) return false;\n"; +} + +function chk_captcha(){ + + global $config; + + $resp = null; + + if ( isset($_POST["g-recaptcha-response"]) && !empty($_POST["g-recaptcha-response"]) ) { + + $reCaptcha = new ReCaptcha_GNU( $config['cf_recaptcha_secret_key'] ); + + $resp = $reCaptcha->verify($_POST["g-recaptcha-response"], $_SERVER["REMOTE_ADDR"]); + } + + if( ! $resp ){ + return false; + } + + if ($resp != null && $resp->success) { + return true; + } + + return false; +} +?> \ No newline at end of file diff --git a/plugin/sns/icon/facebook.png b/plugin/sns/icon/facebook.png index b9d733963ba81f9914f5f7ed1e08d79a2089b9ad..cf737d63396897c71b9d50974a9f0d1193176c2c 100644 GIT binary patch literal 3123 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 N002ovPDHLkV1j_o#n%7; literal 1052 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 P00000NkvXXu0mjfN&e-$ diff --git a/plugin/sns/icon/kakaotalk.png b/plugin/sns/icon/kakaotalk.png index 78fe26ca7a44efcab004d7ae4fb634ad270f83f2..07de029ef9d9dcace55ab5230933d487e60b2634 100644 GIT binary patch literal 4179 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 literal 1532 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 XP5mJXa!~Dz00000NkvXXu0mjfpzu3< literal 1030 zcmV+h1o``kP)=olesJ~Gzdo{Zz1_IA-mYUmSI`Cs z=7h2)DS)+h4eJZdTQaLwI)g$J)Jz|ep+G=0SZg8ZrqJev;QW}TW!H!)>AjLW+Ik-% zns#fahmSvdh@FEWZoGF9@4vAI^@4ErlbJ%5rGq*+wMrP^%ZJbK-QF>tRTF&r%@gEf zjnbSx^S_N)%#=!(bYrGg@UlfxLEOqvi$lm*BB@HU#QQkCsLu%+jx_AdAAHYDsf_lD zC;uvI5R%7L$t{GXNjD#CdCzCKyn;?6#+#RyAnDmDoD~yOvTSF^M6oJ;GAdF!u%dyx z-~M?{E?a2{ZZM$n>sMYu&dT8n?yX=b$O=0Fn*fI7g#;C0h$^+0R~DYD5wD;-RM^cY z!sz{zxgA)W(s^~Fn2T>Hk2WG3B*!j5$^kuhu@#rvF|Ka3ajY~6@>q^1Go|LjIbZxA zMQKTYz+r|WuNPv0d)L<768~#s=B2_=nd!z7fd!vbVDxK#% ze8Tcp&@7x^1{buHP9pHuS`GJqAAkg-b)ks^I;0*SYQNrzq4~H#6z919S{oH?8@=vF@d#QGs_>QxriHpKlMGytE!8ZQzW@RYi57-O0r&OXg5iBe>{Iif2*S z62hJyn!AG`uB~Rcvb2Z?Pe(4Vp*VYztz;7KE?XQGIZa4Vc$QPFlnPw|_=udXF!i^4 zeYC0(Zd}Z$V2K+$-5>!*l;5qR9wmwwz%eDC*;Zo8!#wYnS}oI;1i8{UbE43-HymSU zaD0B)Il>2%6vA818!3`xsRA?Q{y+Use%O9=_x1HvG~z1Cc|S|6mbNmnz)VS7aP#M< zyTM+sce9?Roj{2BK279npOkj{`EB|FZT>6302R|;hYG@@=Z A0RR91 diff --git a/plugin/sns/view.sns.skin.php b/plugin/sns/view.sns.skin.php index aa1cc0ba4..a798cfd0e 100644 --- a/plugin/sns/view.sns.skin.php +++ b/plugin/sns/view.sns.skin.php @@ -30,12 +30,15 @@ $gplus_url = $sns_send.'&sns=gplus'; Kakao.init(""); +
    +
      -
    • 페이스북으로 보내기
    • -
    • 트위터로 보내기
    • -
    • 구글플러스로 보내기
    • +
    • 트위터로 보내기
    • +
    • 페이스북으로 보내기
    • +
    • 구글플러스로 보내기
    • -
    • 카카오톡으로 보내기
    • +
    • 카카오톡으로 보내기
    +
    diff --git a/plugin/sns/view_comment_write.sns.skin.php b/plugin/sns/view_comment_write.sns.skin.php index 75584ba35..44457ec20 100644 --- a/plugin/sns/view_comment_write.sns.skin.php +++ b/plugin/sns/view_comment_write.sns.skin.php @@ -1,7 +1,7 @@
      @@ -30,17 +30,16 @@ if ($config['cf_facebook_appid']) { } } - echo '
    • '; + echo '
    • '; if ($facebook_user) { echo ''; echo ''; echo ''; } else { $facebook_url = $facebook->getLoginUrl(array("redirect_uri"=>G5_SNS_URL."/facebook/callback.php", "scope"=>"publish_stream,read_stream,offline_access", "display"=>"popup")); - - echo ''; - echo ''; echo ''; + echo ''; + echo ''; echo ''; } echo '
    • '; @@ -90,15 +89,15 @@ if ($config['cf_twitter_key']) { } } - echo '
    • '; + echo '
    • '; if ($twitter_user) { echo ''; echo ''; echo ''; } else { - echo ''; echo ''; echo ''; + echo ''; echo ''; } echo '
    • '; diff --git a/plugin/social/Hybrid/Auth.php b/plugin/social/Hybrid/Auth.php new file mode 100644 index 000000000..5642b5091 --- /dev/null +++ b/plugin/social/Hybrid/Auth.php @@ -0,0 +1,414 @@ +getSessionData()); + Hybrid_Logger::info("Hybrid_Auth initialize: check if any error is stored on the endpoint..."); + + if (Hybrid_Error::hasError()) { + $m = Hybrid_Error::getErrorMessage(); + $c = Hybrid_Error::getErrorCode(); + $p = Hybrid_Error::getErrorPrevious(); + + Hybrid_Logger::error("Hybrid_Auth initialize: A stored Error found, Throw an new Exception and delete it from the store: Error#$c, '$m'"); + + Hybrid_Error::clearError(); + + // try to provide the previous if any + // Exception::getPrevious (PHP 5 >= 5.3.0) http://php.net/manual/en/exception.getprevious.php + if (version_compare(PHP_VERSION, '5.3.0', '>=') && ($p instanceof Exception)) { + throw new Exception($m, $c, $p); + } else { + throw new Exception($m, $c); + } + } + + Hybrid_Logger::info("Hybrid_Auth initialize: no error found. initialization succeed."); + } + + /** + * Hybrid storage system accessor + * + * Users sessions are stored using HybridAuth storage system ( HybridAuth 2.0 handle PHP Session only) and can be accessed directly by + * Hybrid_Auth::storage()->get($key) to retrieves the data for the given key, or calling + * Hybrid_Auth::storage()->set($key, $value) to store the key => $value set. + * + * @return Hybrid_Storage + */ + public static function storage() { + return Hybrid_Auth::$store; + } + + /** + * Get hybridauth session data + * @return string|null + */ + function getSessionData() { + return Hybrid_Auth::storage()->getSessionData(); + } + + /** + * Restore hybridauth session data + * + * @param string $sessiondata Serialized session data + * @retun void + */ + function restoreSessionData($sessiondata = null) { + Hybrid_Auth::storage()->restoreSessionData($sessiondata); + } + + /** + * Try to authenticate the user with a given provider. + * + * If the user is already connected we just return and instance of provider adapter, + * ELSE, try to authenticate and authorize the user with the provider. + * + * $params is generally an array with required info in order for this provider and HybridAuth to work, + * like : + * hauth_return_to: URL to call back after authentication is done + * openid_identifier: The OpenID identity provider identifier + * google_service: can be "Users" for Google user accounts service or "Apps" for Google hosted Apps + * + * @param string $providerId ID of the provider + * @param array $params Params + * @return + */ + public static function authenticate($providerId, $params = null) { + Hybrid_Logger::info("Enter Hybrid_Auth::authenticate( $providerId )"); + + if (!Hybrid_Auth::storage()->get("hauth_session.$providerId.is_logged_in")) { + // if user not connected to $providerId then try setup a new adapter and start the login process for this provider + Hybrid_Logger::info("Hybrid_Auth::authenticate( $providerId ), User not connected to the provider. Try to authenticate.."); + $provider_adapter = Hybrid_Auth::setup($providerId, $params); + $provider_adapter->login(); + } else { + // else, then return the adapter instance for the given provider + Hybrid_Logger::info("Hybrid_Auth::authenticate( $providerId ), User is already connected to this provider. Return the adapter instance."); + return Hybrid_Auth::getAdapter($providerId); + } + } + + /** + * Return the adapter instance for an authenticated provider + * + * @param string $providerId ID of the provider + * @return Hybrid_Provider_Adapter + */ + public static function getAdapter($providerId = null) { + Hybrid_Logger::info("Enter Hybrid_Auth::getAdapter( $providerId )"); + return Hybrid_Auth::setup($providerId); + } + + /** + * Setup an adapter for a given provider + * + * @param string $providerId ID of the provider + * @param array $params Adapter params + * @return Hybrid_Provider_Adapter + */ + public static function setup($providerId, $params = null) { + Hybrid_Logger::debug("Enter Hybrid_Auth::setup( $providerId )", $params); + + if (!$params) { + $params = Hybrid_Auth::storage()->get("hauth_session.$providerId.id_provider_params"); + + Hybrid_Logger::debug("Hybrid_Auth::setup( $providerId ), no params given. Trying to get the stored for this provider.", $params); + } + + if (!$params) { + $params = array(); + Hybrid_Logger::info("Hybrid_Auth::setup( $providerId ), no stored params found for this provider. Initialize a new one for new session"); + } + + if (is_array($params) && !isset($params["hauth_return_to"])) { + $params["hauth_return_to"] = Hybrid_Auth::getCurrentUrl(); + Hybrid_Logger::debug("Hybrid_Auth::setup( $providerId ). HybridAuth Callback URL set to: ", $params["hauth_return_to"]); + } + + # instantiate a new IDProvider Adapter + $provider = new Hybrid_Provider_Adapter(); + $provider->factory($providerId, $params); + return $provider; + } + + /** + * Check if the current user is connected to a given provider + * + * @param string $providerId ID of the provider + * @return bool + */ + public static function isConnectedWith($providerId) { + return (bool) Hybrid_Auth::storage()->get("hauth_session.{$providerId}.is_logged_in"); + } + + /** + * Return array listing all authenticated providers + * @return array + */ + public static function getConnectedProviders() { + $idps = array(); + + foreach (Hybrid_Auth::$config["providers"] as $idpid => $params) { + if (Hybrid_Auth::isConnectedWith($idpid)) { + $idps[] = $idpid; + } + } + + return $idps; + } + + /** + * Return array listing all enabled providers as well as a flag if you are connected + * + * + * array( + * 'Facebook' => array( + * 'connected' => true + * ) + * ) + * + * @return array + */ + public static function getProviders() { + $idps = array(); + + foreach (Hybrid_Auth::$config["providers"] as $idpid => $params) { + if ($params['enabled']) { + $idps[$idpid] = array('connected' => false); + + if (Hybrid_Auth::isConnectedWith($idpid)) { + $idps[$idpid]['connected'] = true; + } + } + } + + return $idps; + } + + /** + * A generic function to logout all connected provider at once + * @return void + */ + public static function logoutAllProviders() { + $idps = Hybrid_Auth::getConnectedProviders(); + + foreach ($idps as $idp) { + $adapter = Hybrid_Auth::getAdapter($idp); + $adapter->logout(); + } + } + + /** + * Utility function, redirect to a given URL with php header or using javascript location.href + * + * @param string $url URL to redirect to + * @param string $mode PHP|JS + */ + public static function redirect($url, $mode = "PHP") { + if(!$mode){ + $mode = 'PHP'; + } + Hybrid_Logger::info("Enter Hybrid_Auth::redirect( $url, $mode )"); + + // Ensure session is saved before sending response, see https://github.com/symfony/symfony/pull/12341 + if ((PHP_VERSION_ID >= 50400 && PHP_SESSION_ACTIVE === session_status()) || (PHP_VERSION_ID < 50400 && isset($_SESSION) && session_id())) { + session_write_close(); + } + + if ($mode == "PHP") { + header("Location: $url"); + } elseif ($mode == "JS") { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo 'Redirecting, please wait...'; + echo ''; + echo ''; + } + + die(); + } + + /** + * Utility function, return the current url + * + * @param bool $request_uri true to get $_SERVER['REQUEST_URI'], false for $_SERVER['PHP_SELF'] + * @return string + */ + public static function getCurrentUrl($request_uri = true) { + if (php_sapi_name() == 'cli') { + return ''; + } + + $protocol = 'http://'; + + if ((isset($_SERVER['HTTPS']) && ( $_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1 )) + || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) + { + $protocol = 'https://'; + } + + $url = $protocol . $_SERVER['HTTP_HOST']; + + if ($request_uri) { + $url .= $_SERVER['REQUEST_URI']; + } else { + $url .= $_SERVER['PHP_SELF']; + } + + // return current url + return $url; + } + +} diff --git a/plugin/social/Hybrid/Endpoint.php b/plugin/social/Hybrid/Endpoint.php new file mode 100644 index 000000000..7813fee05 --- /dev/null +++ b/plugin/social/Hybrid/Endpoint.php @@ -0,0 +1,222 @@ +here we need to parse $_SERVER[QUERY_STRING] + $request = $_REQUEST; + if (isset($_SERVER["QUERY_STRING"]) && strrpos($_SERVER["QUERY_STRING"], '?')) { + $_SERVER["QUERY_STRING"] = str_replace("?", "&", $_SERVER["QUERY_STRING"]); + parse_str($_SERVER["QUERY_STRING"], $request); + } + } + + // Setup request variable + $this->request = $request; + + // If openid_policy requested, we return our policy document + if (isset($this->request["get"]) && $this->request["get"] == "openid_policy") { + $this->processOpenidPolicy(); + } + + // If openid_xrds requested, we return our XRDS document + if (isset($this->request["get"]) && $this->request["get"] == "openid_xrds") { + $this->processOpenidXRDS(); + } + + // If we get a hauth.start + if (isset($this->request["hauth_start"]) && $this->request["hauth_start"]) { + $this->processAuthStart(); + } + // Else if hauth.done + elseif (isset($this->request["hauth_done"]) && $this->request["hauth_done"]) { + $this->processAuthDone(); + } + // Else we advertise our XRDS document, something supposed to be done from the Realm URL page + else { + $this->processOpenidRealm(); + } + } + + /** + * Process the current request + * + * @param array $request The current request parameters. Leave as null to default to use $_REQUEST. + * @return Hybrid_Endpoint + */ + public static function process($request = null) { + // Trick for PHP 5.2, because it doesn't support late static binding + $class = function_exists('get_called_class') ? get_called_class() : __CLASS__; + new $class($request); + } + + /** + * Process OpenID policy request + * @return void + */ + protected function processOpenidPolicy() { + $output = file_get_contents(dirname(__FILE__) . "/resources/openid_policy.html"); + print $output; + die(); + } + + /** + * Process OpenID XRDS request + * @return void + */ + protected function processOpenidXRDS() { + header("Content-Type: application/xrds+xml"); + + $output = str_replace("{RETURN_TO_URL}", str_replace( + array("<", ">", "\"", "'", "&"), array("<", ">", """, "'", "&"), Hybrid_Auth::getCurrentUrl(false) + ), file_get_contents(dirname(__FILE__) . "/resources/openid_xrds.xml")); + print $output; + die(); + } + + /** + * Process OpenID realm request + * @return void + */ + protected function processOpenidRealm() { + $output = str_replace("{X_XRDS_LOCATION}", htmlentities(Hybrid_Auth::getCurrentUrl(false), ENT_QUOTES, 'UTF-8') + . "?get=openid_xrds&v=" + . Hybrid_Auth::$version, file_get_contents(dirname(__FILE__) . "/resources/openid_realm.html")); + print $output; + die(); + } + + /** + * Define: endpoint step 3 + * @return void + * @throws Hybrid_Exception + */ + protected function processAuthStart() { + $this->authInit(); + + $provider_id = trim(strip_tags($this->request["hauth_start"])); + + // check if page accessed directly + if (!Hybrid_Auth::storage()->get("hauth_session.$provider_id.hauth_endpoint")) { + Hybrid_Logger::error("Endpoint: hauth_endpoint parameter is not defined on hauth_start, halt login process!"); + + throw new Hybrid_Exception("You cannot access this page directly."); + } + + // define:hybrid.endpoint.php step 2. + $hauth = Hybrid_Auth::setup($provider_id); + + // if REQUESTed hauth_idprovider is wrong, session not created, etc. + if (!$hauth) { + Hybrid_Logger::error("Endpoint: Invalid parameter on hauth_start!"); + throw new Hybrid_Exception("Invalid parameter! Please return to the login page and try again."); + } + + try { + Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginBegin()"); + + $hauth->adapter->loginBegin(); + } catch (Exception $e) { + Hybrid_Logger::error("Exception:" . $e->getMessage(), $e); + Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e->getPrevious()); + + $hauth->returnToCallbackUrl(); + } + + die(); + } + + /** + * Define: endpoint step 3.1 and 3.2 + * @return void + * @throws Hybrid_Exception + */ + protected function processAuthDone() { + $this->authInit(); + + $provider_id = trim(strip_tags($this->request["hauth_done"])); + + $hauth = Hybrid_Auth::setup($provider_id); + + if (!$hauth) { + Hybrid_Logger::error("Endpoint: Invalid parameter on hauth_done!"); + + $hauth->adapter->setUserUnconnected(); + + throw new Hybrid_Exception("Invalid parameter! Please return to the login page and try again."); + } + + try { + Hybrid_Logger::info("Endpoint: call adapter [{$provider_id}] loginFinish() "); + $hauth->adapter->loginFinish(); + } catch (Exception $e) { + Hybrid_Logger::error("Exception:" . $e->getMessage(), $e); + Hybrid_Error::setError($e->getMessage(), $e->getCode(), $e->getTraceAsString(), $e->getPrevious()); + + $hauth->adapter->setUserUnconnected(); + } + + Hybrid_Logger::info("Endpoint: job done. return to callback url."); + + $hauth->returnToCallbackUrl(); + die(); + } + + /** + * Initializes authentication + * @throws Hybrid_Exception + */ + protected function authInit() { + if (!$this->initDone) { + $this->initDone = true; + + // Init Hybrid_Auth + try { + if (!class_exists("Hybrid_Storage", false)) { + require_once realpath(dirname(__FILE__)) . "/Storage.php"; + } + if (!class_exists("Hybrid_Exception", false)) { + require_once realpath(dirname(__FILE__)) . "/Exception.php"; + } + if (!class_exists("Hybrid_Logger", false)) { + require_once realpath(dirname(__FILE__)) . "/Logger.php"; + } + + $storage = new Hybrid_Storage(); + + // Check if Hybrid_Auth session already exist + if (!$storage->config("CONFIG")) { + throw new Hybrid_Exception("You cannot access this page directly."); + } + + Hybrid_Auth::initialize($storage->config("CONFIG")); + } catch (Exception $e) { + Hybrid_Logger::error("Endpoint: Error while trying to init Hybrid_Auth: " . $e->getMessage()); + throw new Hybrid_Exception( "Endpoint: Error while trying to init Hybrid_Auth: " . $e->getMessage(), $e->getCode(), $e ); + } + } + } + +} diff --git a/plugin/social/Hybrid/Error.php b/plugin/social/Hybrid/Error.php new file mode 100644 index 000000000..e9c319c68 --- /dev/null +++ b/plugin/social/Hybrid/Error.php @@ -0,0 +1,88 @@ +set("hauth_session.error.status", 1); + Hybrid_Auth::storage()->set("hauth_session.error.message", $message); + Hybrid_Auth::storage()->set("hauth_session.error.code", $code); + Hybrid_Auth::storage()->set("hauth_session.error.trace", $trace); + Hybrid_Auth::storage()->set("hauth_session.error.previous", $previous); + } + + /** + * Clear the last error + * @return void + */ + public static function clearError() { + Hybrid_Logger::info("Enter Hybrid_Error::clearError()"); + + Hybrid_Auth::storage()->delete("hauth_session.error.status"); + Hybrid_Auth::storage()->delete("hauth_session.error.message"); + Hybrid_Auth::storage()->delete("hauth_session.error.code"); + Hybrid_Auth::storage()->delete("hauth_session.error.trace"); + Hybrid_Auth::storage()->delete("hauth_session.error.previous"); + } + + /** + * Checks to see if there is a an error. + * @return boolean true if there is an error. + */ + public static function hasError() { + return (bool) Hybrid_Auth::storage()->get("hauth_session.error.status"); + } + + /** + * Return error message + * @return string + */ + public static function getErrorMessage() { + return Hybrid_Auth::storage()->get("hauth_session.error.message"); + } + + /** + * Return error code + * @return int + */ + public static function getErrorCode() { + return Hybrid_Auth::storage()->get("hauth_session.error.code"); + } + + /** + * Return string detailed error backtrace as string + * @return string + */ + public static function getErrorTrace() { + return Hybrid_Auth::storage()->get("hauth_session.error.trace"); + } + + /** + * Detailed error backtrace as string + * @return string + */ + public static function getErrorPrevious() { + return Hybrid_Auth::storage()->get("hauth_session.error.previous"); + } + +} diff --git a/plugin/social/Hybrid/Exception.php b/plugin/social/Hybrid/Exception.php new file mode 100644 index 000000000..8c8c2d1fa --- /dev/null +++ b/plugin/social/Hybrid/Exception.php @@ -0,0 +1,17 @@ +format(DATE_ATOM), + $message, + print_r($object, true) . PHP_EOL, + )), FILE_APPEND + ); + } + } + + /** + * Logs an info message + * + * @param string $message Info message + * @return void + */ + public static function info($message) { + if (in_array(Hybrid_Auth::$config["debug_mode"], array(true, 'info'), true)) { + $dt = new DateTime('now', new DateTimeZone( 'UTC' )); + file_put_contents(Hybrid_Auth::$config["debug_file"], implode(' -- ', array( + "INFO", + $_SERVER['REMOTE_ADDR'], + $dt->format(DATE_ATOM), + $message . PHP_EOL, + )), FILE_APPEND); + } + } + + /** + * Logs an error message with an object dump + * + * @param string $message Error message + * @param stdClass $object Object being debugged + * @return void + */ + public static function error($message, $object = null) { + if (isset(Hybrid_Auth::$config["debug_mode"]) && in_array(Hybrid_Auth::$config["debug_mode"], array(true, 'info', 'error'), true)) { + $dt = new DateTime('now', new DateTimeZone( 'UTC' )); + file_put_contents(Hybrid_Auth::$config["debug_file"], implode(' -- ', array( + 'ERROR', + $_SERVER['REMOTE_ADDR'], + $dt->format(DATE_ATOM), + $message, + print_r($object, true) . PHP_EOL + )), FILE_APPEND); + } + } + + /** + * Dumps the data in the way suitable to be output in log files for debug purposes + * + * @param mixed $data + * + * @return string + */ + public static function dumpData($data) { + return var_export($data, true); + } + +} diff --git a/plugin/social/Hybrid/Provider_Adapter.php b/plugin/social/Hybrid/Provider_Adapter.php new file mode 100644 index 000000000..aeeb30bb2 --- /dev/null +++ b/plugin/social/Hybrid/Provider_Adapter.php @@ -0,0 +1,340 @@ +id = $id; + $this->params = $params; + $this->id = $this->getProviderCiId($this->id); + $this->config = $this->getConfigById($this->id); + + # check the IDp id + if (!$this->id) { + throw new Exception("No provider ID specified.", 2); + } + + # check the IDp config + if (!$this->config) { + throw new Exception("Unknown Provider ID, check your configuration file.", 3); + } + + # check the IDp adapter is enabled + if (!$this->config["enabled"]) { + throw new Exception("The provider '{$this->id}' is not enabled.", 3); + } + + # include the adapter wrapper + if (isset($this->config["wrapper"]) && is_array($this->config["wrapper"])) { + if (isset($this->config["wrapper"]["path"])) { + require_once $this->config["wrapper"]["path"]; + } + + if (!class_exists($this->config["wrapper"]["class"])) { + throw new Exception("Unable to load the adapter class.", 3); + } + + $this->wrapper = $this->config["wrapper"]["class"]; + } else { + require_once Hybrid_Auth::$config["path_providers"] . $this->id . ".php"; + + $this->wrapper = "Hybrid_Providers_" . $this->id; + } + + # create the adapter instance, and pass the current params and config + $this->adapter = new $this->wrapper($this->id, $this->config, $this->params); + + return $this; + } + + /** + * Hybrid_Provider_Adapter::login(), prepare the user session and the authentication request + * for index.php + * @return void + * @throw Exception + */ + function login() { + Hybrid_Logger::info("Enter Hybrid_Provider_Adapter::login( {$this->id} ) "); + + if (!$this->adapter) { + throw new Exception("Hybrid_Provider_Adapter::login() should not directly used."); + } + + // clear all unneeded params + foreach (Hybrid_Auth::$config["providers"] as $idpid => $params) { + Hybrid_Auth::storage()->delete("hauth_session.{$idpid}.hauth_return_to"); + Hybrid_Auth::storage()->delete("hauth_session.{$idpid}.hauth_endpoint"); + Hybrid_Auth::storage()->delete("hauth_session.{$idpid}.id_provider_params"); + } + + // make a fresh start + $this->logout(); + + # get hybridauth base url + if (empty(Hybrid_Auth::$config["base_url"])) { + // the base url wasn't provide, so we must use the current + // url (which makes sense actually) + $url = empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ? 'http' : 'https'; + $url .= '://' . $_SERVER['HTTP_HOST']; + $url .= $_SERVER['REQUEST_URI']; + $HYBRID_AUTH_URL_BASE = $url; + } else { + $HYBRID_AUTH_URL_BASE = Hybrid_Auth::$config["base_url"]; + } + + // make sure params is array + if (!is_array($this->params)) { + $this->params = array(); + } + + # we make use of session_id() as storage hash to identify the current user + # using session_regenerate_id() will be a problem, but .. + $this->params["hauth_token"] = session_id(); + + # set request timestamp + $this->params["hauth_time"] = time(); + + # for default HybridAuth endpoint url hauth_login_start_url + # auth.start required the IDp ID + # auth.time optional login request timestamp + if (!isset($this->params["login_start"]) ) { + $this->params["login_start"] = $HYBRID_AUTH_URL_BASE . ( strpos($HYBRID_AUTH_URL_BASE, '?') ? '&' : '?' ) . "hauth.start={$this->id}&hauth.time={$this->params["hauth_time"]}"; + } + + # for default HybridAuth endpoint url hauth_login_done_url + # auth.done required the IDp ID + if (!isset($this->params["login_done"]) ) { + $this->params["login_done"] = $HYBRID_AUTH_URL_BASE . ( strpos($HYBRID_AUTH_URL_BASE, '?') ? '&' : '?' ) . "hauth.done={$this->id}"; + } + + # workaround to solve windows live authentication since microsoft disallowed redirect urls to contain any parameters + # http://mywebsite.com/path_to_hybridauth/?hauth.done=Live will not work + if ($this->id=="Live") { + $this->params["login_done"] = $HYBRID_AUTH_URL_BASE."live.php"; + } + + # Workaround to fix broken callback urls for the Facebook OAuth client + if ($this->adapter->useSafeUrls) { + $this->params['login_done'] = str_replace('hauth.done', 'hauth_done', $this->params['login_done']); + } + + if (isset($this->params["hauth_return_to"])) { + Hybrid_Auth::storage()->set("hauth_session.{$this->id}.hauth_return_to", $this->params["hauth_return_to"]); + } + if (isset($this->params["login_done"])) { + Hybrid_Auth::storage()->set("hauth_session.{$this->id}.hauth_endpoint", $this->params["login_done"]); + } + Hybrid_Auth::storage()->set("hauth_session.{$this->id}.id_provider_params", $this->params); + + // store config to be used by the end point + Hybrid_Auth::storage()->config("CONFIG", Hybrid_Auth::$config); + + // move on + Hybrid_Logger::debug("Hybrid_Provider_Adapter::login( {$this->id} ), redirect the user to login_start URL."); + + // redirect + if (empty($this->params["redirect_mode"])) { + Hybrid_Auth::redirect($this->params["login_start"]); + } else { + Hybrid_Auth::redirect($this->params["login_start"],$this->params["redirect_mode"]); + } + } + + /** + * Let hybridauth forget all about the user for the current provider + * @return bool + */ + function logout() { + $this->adapter->logout(); + } + + // -------------------------------------------------------------------- + + /** + * Return true if the user is connected to the current provider + * @return bool + */ + public function isUserConnected() { + return $this->adapter->isUserConnected(); + } + + // -------------------------------------------------------------------- + + /** + * Call adapter methods defined in the adapter model: + * getUserProfile() + * getUserContacts() + * getUserActivity() + * setUserStatus() + * + * @param string $name Method name + * @param array $arguments Call arguments + * @return mixed + * @throws Exception + */ + public function __call($name, $arguments) { + Hybrid_Logger::info("Enter Hybrid_Provider_Adapter::$name(), Provider: {$this->id}"); + + if (!$this->isUserConnected()) { + throw new Exception("User not connected to the provider {$this->id}.", 7); + } + + if (!method_exists($this->adapter, $name)) { + throw new Exception("Call to undefined function Hybrid_Providers_{$this->id}::$name()."); + } + + return call_user_func_array(array($this->adapter, $name), $arguments); + } + + /** + * If the user is connected, then return the access_token and access_token_secret + * if the provider api use oauth + * + * + * array( + * 'access_token' => '', + * 'access_token_secret' => '', + * 'refresh_token' => '', + * 'expires_in' => '', + * 'expires_at' => '', + * ) + * + * @return array + */ + public function getAccessToken() { + if (!$this->adapter->isUserConnected()) { + Hybrid_Logger::error("User not connected to the provider."); + throw new Exception("User not connected to the provider.", 7); + } + + return array( + "access_token" => $this->adapter->token("access_token"), // OAuth access token + "access_token_secret" => $this->adapter->token("access_token_secret"), // OAuth access token secret + "refresh_token" => $this->adapter->token("refresh_token"), // OAuth refresh token + "expires_in" => $this->adapter->token("expires_in"), // OPTIONAL. The duration in seconds of the access token lifetime + "expires_at" => $this->adapter->token("expires_at"), // OPTIONAL. Timestamp when the access_token expire. if not provided by the social api, then it should be calculated: expires_at = now + expires_in + ); + } + + /** + * Naive getter of the current connected IDp API client + * @return stdClass + * @throws Exception + */ + function api() { + if (!$this->adapter->isUserConnected()) { + Hybrid_Logger::error("User not connected to the provider."); + + throw new Exception("User not connected to the provider.", 7); + } + return $this->adapter->api; + } + + /** + * Redirect the user to hauth_return_to (the callback url) + * @return void + */ + function returnToCallbackUrl() { + // get the stored callback url + $callback_url = Hybrid_Auth::storage()->get("hauth_session.{$this->id}.hauth_return_to"); + + // if the user presses the back button in the browser and we already deleted the hauth_return_to from + // the session in the previous request, we will redirect to '/' instead of displaying a blank page. + if (!$callback_url) { + $callback_url = '/'; + } + + // remove some unneeded stored data + Hybrid_Auth::storage()->delete("hauth_session.{$this->id}.hauth_return_to"); + Hybrid_Auth::storage()->delete("hauth_session.{$this->id}.hauth_endpoint"); + Hybrid_Auth::storage()->delete("hauth_session.{$this->id}.id_provider_params"); + + // back to home + Hybrid_Auth::redirect($callback_url); + } + + /** + * Return the provider config by id + * + * @param string $id Config key + * @return mixed + */ + function getConfigById($id) { + if (isset(Hybrid_Auth::$config["providers"][$id])) { + return Hybrid_Auth::$config["providers"][$id]; + } + return null; + } + + /** + * Return the provider config by id; case insensitive + * + * @param string $id Provider id + * @return mixed + */ + function getProviderCiId($id) { + foreach (Hybrid_Auth::$config["providers"] as $idpid => $params) { + if (strtolower($idpid) == strtolower($id)) { + return $idpid; + } + } + return null; + } + +} diff --git a/plugin/social/Hybrid/Provider_Model.php b/plugin/social/Hybrid/Provider_Model.php new file mode 100644 index 000000000..320cee9e1 --- /dev/null +++ b/plugin/social/Hybrid/Provider_Model.php @@ -0,0 +1,247 @@ +params = Hybrid_Auth::storage()->get("hauth_session.$providerId.id_provider_params"); + } else { + $this->params = $params; + } + + // idp id + $this->providerId = $providerId; + + // set HybridAuth endpoint for this provider + $this->endpoint = Hybrid_Auth::storage()->get("hauth_session.$providerId.hauth_endpoint"); + + // idp config + $this->config = $config; + + // new user instance + $this->user = new Hybrid_User(); + $this->user->providerId = $providerId; + + // initialize the current provider adapter + $this->initialize(); + + Hybrid_Logger::debug("Hybrid_Provider_Model::__construct( $providerId ) initialized. dump current adapter instance: ", serialize($this)); + } + + /** + * IDp wrappers initializer + * + * The main job of wrappers initializer is to performs (depend on the IDp api client it self): + * - include some libs needed by this provider, + * - check IDp key and secret, + * - set some needed parameters (stored in $this->params) by this IDp api client + * - create and setup an instance of the IDp api client on $this->api + * + * @return void + * @throws Exception + */ + abstract protected function initialize(); + + /** + * Begin login + * + * @return void + * @throws Exception + */ + abstract public function loginBegin(); + + /** + * Finish login + * @return void + * @throws Exception + */ + abstract public function loginFinish(); + + /** + * Generic logout, just erase current provider adapter stored data to let Hybrid_Auth all forget about it + * @return bool + */ + function logout() { + Hybrid_Logger::info("Enter [{$this->providerId}]::logout()"); + $this->clearTokens(); + return true; + } + + /** + * Grab the user profile from the IDp api client + * @return Hybrid_User_Profile + * @throws Exception + */ + function getUserProfile() { + Hybrid_Logger::error("HybridAuth do not provide users contacts list for {$this->providerId} yet."); + throw new Exception("Provider does not support this feature.", 8); + } + + /** + * Load the current logged in user contacts list from the IDp api client + * @return Hybrid_User_Contact[] + * @throws Exception + */ + function getUserContacts() { + Hybrid_Logger::error("HybridAuth do not provide users contacts list for {$this->providerId} yet."); + throw new Exception("Provider does not support this feature.", 8); + } + + /** + * Return the user activity stream + * @return Hybrid_User_Activity[] + * @throws Exception + */ + function getUserActivity($stream) { + Hybrid_Logger::error("HybridAuth do not provide user's activity stream for {$this->providerId} yet."); + throw new Exception("Provider does not support this feature.", 8); + } + + /** + * Set user status + * @return mixed Provider response + * @throws Exception + */ + function setUserStatus($status) { + Hybrid_Logger::error("HybridAuth do not provide user's activity stream for {$this->providerId} yet."); + throw new Exception("Provider does not support this feature.", 8); + } + + /** + * Return the user status + * @return mixed Provider response + * @throws Exception + */ + function getUserStatus($statusid) { + Hybrid_Logger::error("HybridAuth do not provide user's status for {$this->providerId} yet."); + throw new Exception("Provider does not support this feature.", 8); + } + + /** + * Return true if the user is connected to the current provider + * @return bool + */ + public function isUserConnected() { + return (bool) Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.is_logged_in"); + } + + /** + * Set user to connected + * @return void + */ + public function setUserConnected() { + Hybrid_Logger::info("Enter [{$this->providerId}]::setUserConnected()"); + Hybrid_Auth::storage()->set("hauth_session.{$this->providerId}.is_logged_in", 1); + } + + /** + * Set user to unconnected + * @return void + */ + public function setUserUnconnected() { + Hybrid_Logger::info("Enter [{$this->providerId}]::setUserUnconnected()"); + Hybrid_Auth::storage()->set("hauth_session.{$this->providerId}.is_logged_in", 0); + } + + /** + * Get or set a token + * @return string + */ + public function token($token, $value = null) { + if ($value === null) { + return Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.token.$token"); + } else { + Hybrid_Auth::storage()->set("hauth_session.{$this->providerId}.token.$token", $value); + } + } + + /** + * Delete a stored token + * @return void + */ + public function deleteToken($token) { + Hybrid_Auth::storage()->delete("hauth_session.{$this->providerId}.token.$token"); + } + + /** + * Clear all existent tokens for this provider + * @return void + */ + public function clearTokens() { + Hybrid_Auth::storage()->deleteMatch("hauth_session.{$this->providerId}."); + } + +} diff --git a/plugin/social/Hybrid/Provider_Model_OAuth1.php b/plugin/social/Hybrid/Provider_Model_OAuth1.php new file mode 100644 index 000000000..6f5f239ae --- /dev/null +++ b/plugin/social/Hybrid/Provider_Model_OAuth1.php @@ -0,0 +1,174 @@ + "OK: Success!", + 304 => "Not Modified: There was no new data to return.", + 400 => "Bad Request: The request was invalid.", + 401 => "Unauthorized.", + 403 => "Forbidden: The request is understood, but it has been refused.", + 404 => "Not Found: The URI requested is invalid or the resource requested does not exists.", + 406 => "Not Acceptable.", + 500 => "Internal Server Error: Something is broken.", + 502 => "Bad Gateway.", + 503 => "Service Unavailable." + ); + + if (!$code && $this->api) { + $code = $this->api->http_code; + } + + if (isset($http_status_codes[$code])) { + return $code . " " . $http_status_codes[$code]; + } + } + + /** + * {@inheritdoc} + */ + function initialize() { + // 1 - check application credentials + if (!$this->config["keys"]["key"] || !$this->config["keys"]["secret"]) { + throw new Exception("Your application key and secret are required in order to connect to {$this->providerId}.", 4); + } + + // 2 - include OAuth lib and client + if (! class_exists('OAuthConsumer') ) { + require_once Hybrid_Auth::$config["path_libraries"] . "OAuth/OAuth.php"; + } + require_once Hybrid_Auth::$config["path_libraries"] . "OAuth/OAuth1Client.php"; + + // 3.1 - setup access_token if any stored + if ($this->token("access_token")) { + $this->api = new OAuth1Client( + $this->config["keys"]["key"], $this->config["keys"]["secret"], $this->token("access_token"), $this->token("access_token_secret") + ); + } + + // 3.2 - setup request_token if any stored, in order to exchange with an access token + elseif ($this->token("request_token")) { + $this->api = new OAuth1Client( + $this->config["keys"]["key"], $this->config["keys"]["secret"], $this->token("request_token"), $this->token("request_token_secret") + ); + } + + // 3.3 - instanciate OAuth client with client credentials + else { + $this->api = new OAuth1Client($this->config["keys"]["key"], $this->config["keys"]["secret"]); + } + + // Set curl proxy if exist + if (isset(Hybrid_Auth::$config["proxy"])) { + $this->api->curl_proxy = Hybrid_Auth::$config["proxy"]; + } + } + + /** + * {@inheritdoc} + */ + function loginBegin() { + $tokens = $this->api->requestToken($this->endpoint); + + // request tokens as received from provider + $this->request_tokens_raw = $tokens; + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("Authentication failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code), 5); + } + + if (!isset($tokens["oauth_token"])) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid oauth token.", 5); + } + + $this->token("request_token", $tokens["oauth_token"]); + $this->token("request_token_secret", $tokens["oauth_token_secret"]); + + # redirect the user to the provider authentication url + Hybrid_Auth::redirect($this->api->authorizeUrl($tokens)); + } + + /** + * {@inheritdoc} + */ + function loginFinish() { + $oauth_token = (array_key_exists('oauth_token', $_REQUEST)) ? $_REQUEST['oauth_token'] : ""; + $oauth_verifier = (array_key_exists('oauth_verifier', $_REQUEST)) ? $_REQUEST['oauth_verifier'] : ""; + + if (!$oauth_token || !$oauth_verifier) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid oauth verifier.", 5); + } + + // request an access token + $tokens = $this->api->accessToken($oauth_verifier); + + // access tokens as received from provider + $this->access_tokens_raw = $tokens; + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("Authentication failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code), 5); + } + + // we should have an access_token, or else, something has gone wrong + if (!isset($tokens["oauth_token"])) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5); + } + + // we no more need to store request tokens + $this->deleteToken("request_token"); + $this->deleteToken("request_token_secret"); + + // store access_token for later user + $this->token("access_token", $tokens['oauth_token']); + $this->token("access_token_secret", $tokens['oauth_token_secret']); + + // set user as logged in to the current provider + $this->setUserConnected(); + } + +} diff --git a/plugin/social/Hybrid/Provider_Model_OAuth2.php b/plugin/social/Hybrid/Provider_Model_OAuth2.php new file mode 100644 index 000000000..17a2103bd --- /dev/null +++ b/plugin/social/Hybrid/Provider_Model_OAuth2.php @@ -0,0 +1,184 @@ + "OK: Success!", + 304 => "Not Modified: There was no new data to return.", + 400 => "Bad Request: The request was invalid.", + 401 => "Unauthorized.", + 403 => "Forbidden: The request is understood, but it has been refused.", + 404 => "Not Found: The URI requested is invalid or the resource requested does not exists.", + 406 => "Not Acceptable.", + 500 => "Internal Server Error: Something is broken.", + 502 => "Bad Gateway.", + 503 => "Service Unavailable." + ); + + if (!$code && $this->api) { + $code = $this->api->http_code; + } + + if (isset($http_status_codes[$code])) { + return $code . " " . $http_status_codes[$code]; + } + } + + /** + * Adapter initializer + */ + function initialize() { + if (!$this->config["keys"]["id"] || !$this->config["keys"]["secret"]) { + throw new Exception("Your application id and secret are required in order to connect to {$this->providerId}.", 4); + } + + // override requested scope + if (isset($this->config["scope"]) && !empty($this->config["scope"])) { + $this->scope = $this->config["scope"]; + } + + // include OAuth2 client + require_once Hybrid_Auth::$config["path_libraries"] . "OAuth/OAuth2Client.php"; + + // create a new OAuth2 client instance + $this->api = new OAuth2Client($this->config["keys"]["id"], $this->config["keys"]["secret"], $this->endpoint, $this->compressed); + + // If we have an access token, set it + if ($this->token("access_token")) { + $this->api->access_token = $this->token("access_token"); + $this->api->refresh_token = $this->token("refresh_token"); + $this->api->access_token_expires_in = $this->token("expires_in"); + $this->api->access_token_expires_at = $this->token("expires_at"); + } + + // Set curl proxy if exist + if (isset(Hybrid_Auth::$config["proxy"])) { + $this->api->curl_proxy = Hybrid_Auth::$config["proxy"]; + } + } + + /** + * {@inheritdoc} + */ + function loginBegin() { + // redirect the user to the provider authentication url + Hybrid_Auth::redirect($this->api->authorizeUrl(array("scope" => $this->scope))); + } + + /** + * {@inheritdoc} + */ + function loginFinish() { + $error = (array_key_exists('error', $_REQUEST)) ? $_REQUEST['error'] : ""; + + // check for errors + if ($error) { + throw new Exception("Authentication failed! {$this->providerId} returned an error: $error", 5); + } + + // try to authenticate user + $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : ""; + + try { + $this->api->authenticate($code); + } catch (Exception $e) { + throw new Exception("User profile request failed! {$this->providerId} returned an error: " . $e->getMessage(), 6); + } + + // check if authenticated + if (!$this->api->access_token) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5); + } + + // store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + + // set user connected locally + $this->setUserConnected(); + } + + /** + * {@inheritdoc} + */ + function refreshToken() { + // have an access token? + if ($this->api->access_token) { + + // have to refresh? + if ($this->api->refresh_token && $this->api->access_token_expires_at) { + + // expired? + if ($this->api->access_token_expires_at <= time()) { + $response = $this->api->refreshToken(array("refresh_token" => $this->api->refresh_token)); + + if (!isset($response->access_token) || !$response->access_token) { + // set the user as disconnected at this point and throw an exception + $this->setUserUnconnected(); + + throw new Exception("The Authorization Service has return an invalid response while requesting a new access token. " . (string) $response->error); + } + + // set new access_token + $this->api->access_token = $response->access_token; + + if (isset($response->refresh_token)) + $this->api->refresh_token = $response->refresh_token; + + if (isset($response->expires_in)) { + $this->api->access_token_expires_in = $response->expires_in; + + // even given by some idp, we should calculate this + $this->api->access_token_expires_at = time() + $response->expires_in; + } + } + } + + // re store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + } + } + +} diff --git a/plugin/social/Hybrid/Provider_Model_OpenID.php b/plugin/social/Hybrid/Provider_Model_OpenID.php new file mode 100644 index 000000000..d3ec7cab5 --- /dev/null +++ b/plugin/social/Hybrid/Provider_Model_OpenID.php @@ -0,0 +1,170 @@ +public $openidIdentifier = ""; + * + * Hybrid_Provider_Model_OpenID use LightOpenID lib which can be found on + * Hybrid/thirdparty/OpenID/LightOpenID.php + */ +class Hybrid_Provider_Model_OpenID extends Hybrid_Provider_Model { + + /** + * Provider API client + * @var LightOpenID + */ + public $api = null; + + /** + * Openid provider identifier + * @var string + */ + public $openidIdentifier = ""; + + /** + * {@inheritdoc} + */ + function initialize() { + if (isset($this->params["openid_identifier"])) { + $this->openidIdentifier = $this->params["openid_identifier"]; + } + + // include LightOpenID lib + require_once Hybrid_Auth::$config["path_libraries"] . "OpenID/LightOpenID.php"; + + // An error was occurring when proxy wasn't set. Not sure where proxy was meant to be set/initialized. + Hybrid_Auth::$config['proxy'] = isset(Hybrid_Auth::$config['proxy']) ? Hybrid_Auth::$config['proxy'] : ''; + + $hostPort = parse_url(Hybrid_Auth::$config["base_url"], PHP_URL_PORT); + $hostUrl = parse_url(Hybrid_Auth::$config["base_url"], PHP_URL_HOST); + + // Check for port on url + if ($hostPort) { + $hostUrl .= ':' . $hostPort; + } + + $this->api = new LightOpenID($hostUrl, Hybrid_Auth::$config["proxy"]); + } + + /** + * {@inheritdoc} + */ + function loginBegin() { + if (empty($this->openidIdentifier)) { + throw new Exception("OpenID adapter require the identity provider identifier 'openid_identifier' as an extra parameter.", 4); + } + + $this->api->identity = $this->openidIdentifier; + $this->api->returnUrl = $this->endpoint; + $this->api->required = array( + 'namePerson/first', + 'namePerson/last', + 'namePerson/friendly', + 'namePerson', + 'contact/email', + 'birthDate', + 'birthDate/birthDay', + 'birthDate/birthMonth', + 'birthDate/birthYear', + 'person/gender', + 'pref/language', + 'contact/postalCode/home', + 'contact/city/home', + 'contact/country/home', + 'media/image/default', + ); + + # redirect the user to the provider authentication url + Hybrid_Auth::redirect($this->api->authUrl()); + } + + /** + * {@inheritdoc} + */ + function loginFinish() { + # if user don't grant access of their data to your site, halt with an Exception + if ($this->api->mode == 'cancel') { + throw new Exception("Authentication failed! User has canceled authentication!", 5); + } + + # if something goes wrong + if (!$this->api->validate()) { + throw new Exception("Authentication failed. Invalid request received!", 5); + } + + # fetch received user data + $response = $this->api->getAttributes(); + + # store the user profile + $this->user->profile->identifier = $this->api->identity; + + $this->user->profile->firstName = (array_key_exists("namePerson/first", $response)) ? $response["namePerson/first"] : ""; + $this->user->profile->lastName = (array_key_exists("namePerson/last", $response)) ? $response["namePerson/last"] : ""; + $this->user->profile->displayName = (array_key_exists("namePerson", $response)) ? $response["namePerson"] : ""; + $this->user->profile->email = (array_key_exists("contact/email", $response)) ? $response["contact/email"] : ""; + $this->user->profile->language = (array_key_exists("pref/language", $response)) ? $response["pref/language"] : ""; + $this->user->profile->country = (array_key_exists("contact/country/home", $response)) ? $response["contact/country/home"] : ""; + $this->user->profile->zip = (array_key_exists("contact/postalCode/home", $response)) ? $response["contact/postalCode/home"] : ""; + $this->user->profile->gender = (array_key_exists("person/gender", $response)) ? $response["person/gender"] : ""; + $this->user->profile->photoURL = (array_key_exists("media/image/default", $response)) ? $response["media/image/default"] : ""; + + $this->user->profile->birthDay = (array_key_exists("birthDate/birthDay", $response)) ? $response["birthDate/birthDay"] : ""; + $this->user->profile->birthMonth = (array_key_exists("birthDate/birthMonth", $response)) ? $response["birthDate/birthMonth"] : ""; + $this->user->profile->birthYear = (array_key_exists("birthDate/birthDate", $response)) ? $response["birthDate/birthDate"] : ""; + + if (isset($response['namePerson/friendly']) && !empty($response['namePerson/friendly']) && !$this->user->profile->displayName) { + $this->user->profile->displayName = $response["namePerson/friendly"]; + } + + if (isset($response['birthDate']) && !empty($response['birthDate']) && !$this->user->profile->birthDay) { + list( $birthday_year, $birthday_month, $birthday_day ) = $response['birthDate']; + + $this->user->profile->birthDay = (int) $birthday_day; + $this->user->profile->birthMonth = (int) $birthday_month; + $this->user->profile->birthYear = (int) $birthday_year; + } + + if (!$this->user->profile->displayName) { + $this->user->profile->displayName = trim($this->user->profile->firstName . " " . $this->user->profile->lastName); + } + + if ($this->user->profile->gender == "f") { + $this->user->profile->gender = "female"; + } + + if ($this->user->profile->gender == "m") { + $this->user->profile->gender = "male"; + } + + // set user as logged in + $this->setUserConnected(); + + // with openid providers we get the user profile only once, so store it + Hybrid_Auth::storage()->set("hauth_session.{$this->providerId}.user", $this->user); + } + + /** + * {@inheritdoc} + */ + function getUserProfile() { + // try to get the user profile from stored data + $this->user = Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.user"); + + // if not found + if (!is_object($this->user)) { + throw new Exception("User profile request failed! User is not connected to {$this->providerId} or his session has expired.", 6); + } + + return $this->user->profile; + } + +} diff --git a/plugin/social/Hybrid/Providers/Facebook.php b/plugin/social/Hybrid/Providers/Facebook.php new file mode 100644 index 000000000..d71d68a9b --- /dev/null +++ b/plugin/social/Hybrid/Providers/Facebook.php @@ -0,0 +1,335 @@ +api->api_base_url = 'https://graph.facebook.com/'; + $this->api->authorize_url = 'https://www.facebook.com/dialog/oauth'; + $this->api->token_url = 'https://graph.facebook.com/v2.3/oauth/access_token'; + $this->api->token_debug = 'https://graph.facebook.com/debug_token'; + + if (!$this->config["keys"]["id"] || !$this->config["keys"]["secret"]) { + throw new Exception("Your application id and secret are required in order to connect to {$this->providerId}.", 4); + } + + // redirect uri mismatches when authenticating with Facebook. + if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) { + $this->api->redirect_uri = $this->config['redirect_uri']; + } + } + /** + * {@inheritdoc} + */ + function loginBegin() { + + $token = md5(uniqid(mt_rand(), true)); + Hybrid_Auth::storage()->set('fb_auth_nonce', $token); + + $parameters = array( + "response_type" => "code", + "client_id" => $this->api->client_id, + "redirect_uri" => $this->api->redirect_uri, + "state" => $token, + "scope" => $this->scope, + ); + + Hybrid_Auth::redirect($this->api->authorizeUrl($parameters)); + } + /** + * {@inheritdoc} + */ + function loginFinish() { + + // in case we get error_reason=user_denied&error=access_denied + if (isset($_REQUEST['error']) && $_REQUEST['error'] == "access_denied") { + throw new Exception("Authentication failed! The user denied your request.", 5); + } + + // try to authenicate user + $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : ""; + try{ + $response = $this->api->authenticate( $code ); + } + catch( Exception $e ){ + throw new Exception( "User profile request failed! {$this->providerId} returned an error: $e", 6 ); + } + + // check if authenticated + if ( ! $this->api->authenticated() ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an invalid access token.", 5 ); + } + // store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + // set user connected locally + $this->setUserConnected(); + + } + + + /** + * {@inheritdoc} + */ + function logout() { + parent::logout(); + } + /** + * {@inheritdoc} + */ + function getUserProfile() { + // request user profile from fb api + try { + $fields = array( + 'id', 'name', 'first_name', 'last_name', 'link', 'website', + 'gender', 'locale', 'about', 'email', 'hometown', 'location', + 'birthday' + ); + $data = $this->api->api('/me?fields=' . implode(',', $fields).'&access_token='.$this->token('access_token')); + } catch (Exception $e) { + $this->logout(); + throw new Exception("User profile request failed! {$this->providerId} returned an error: {$e->getMessage()}", 6, $e); + } + + if( is_object($data) ){ + $data = json_decode(json_encode($data), true); + } + + // if the provider identifier is not received, we assume the auth has failed + if (!isset($data["id"])) { + $this->logout(); + throw new Exception("User profile request failed! {$this->providerId} api returned an invalid response: " . Hybrid_Logger::dumpData( $data ), 6); + } + # store the user profile. + $this->user->profile->identifier = (array_key_exists('id', $data)) ? $data['id'] : ""; + $this->user->profile->username = (array_key_exists('username', $data)) ? $data['username'] : ""; + $this->user->profile->displayName = (array_key_exists('name', $data)) ? $data['name'] : ""; + $this->user->profile->firstName = (array_key_exists('first_name', $data)) ? $data['first_name'] : ""; + $this->user->profile->lastName = (array_key_exists('last_name', $data)) ? $data['last_name'] : ""; + $this->user->profile->photoURL = "https://graph.facebook.com/" . $this->user->profile->identifier . "/picture?width=150&height=150"; + $this->user->profile->coverInfoURL = "https://graph.facebook.com/" . $this->user->profile->identifier . "?fields=cover&access_token=" . $this->token('access_token'); + $this->user->profile->profileURL = (array_key_exists('link', $data)) ? $data['link'] : ""; + $this->user->profile->webSiteURL = (array_key_exists('website', $data)) ? $data['website'] : ""; + $this->user->profile->gender = (array_key_exists('gender', $data)) ? $data['gender'] : ""; + $this->user->profile->language = (array_key_exists('locale', $data)) ? $data['locale'] : ""; + $this->user->profile->description = (array_key_exists('about', $data)) ? $data['about'] : ""; + $this->user->profile->email = (array_key_exists('email', $data)) ? $data['email'] : ""; + $this->user->profile->emailVerified = (array_key_exists('email', $data)) ? $data['email'] : ""; + $this->user->profile->region = (array_key_exists("location", $data) && array_key_exists("name", $data['location'])) ? $data['location']["name"] : ""; + if (!empty($this->user->profile->region)) { + $regionArr = explode(',', $this->user->profile->region); + if (count($regionArr) > 1) { + $this->user->profile->city = trim($regionArr[0]); + $this->user->profile->country = trim($regionArr[1]); + } + } + if (array_key_exists('birthday', $data)) { + list($birthday_month, $birthday_day, $birthday_year) = explode("/", $data['birthday']); + $this->user->profile->birthDay = (int) $birthday_day; + $this->user->profile->birthMonth = (int) $birthday_month; + $this->user->profile->birthYear = (int) $birthday_year; + } + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } + /** + * Attempt to retrieve the url to the cover image given the coverInfoURL + * + * @param string $coverInfoURL coverInfoURL variable + * @return string url to the cover image OR blank string + */ + function getCoverURL($coverInfoURL) { + try { + $headers = get_headers($coverInfoURL); + if (substr($headers[0], 9, 3) != "404") { + $coverOBJ = json_decode(file_get_contents($coverInfoURL)); + if (array_key_exists('cover', $coverOBJ)) { + return $coverOBJ->cover->source; + } + } + } catch (Exception $e) { + } + return ""; + } + /** + * {@inheritdoc} + */ + function getUserContacts() { + $apiCall = '?fields=link,name'; + $returnedContacts = array(); + $pagedList = false; + do { + try { + $response = $this->api->api('/me/friends' . $apiCall); + } catch (Exception $e) { + throw new Exception("User contacts request failed! {$this->providerId} returned an error {$e->getMessage()}", 0, $e); + } + // Prepare the next call if paging links have been returned + if (array_key_exists('paging', $response) && array_key_exists('next', $response['paging'])) { + $pagedList = true; + $next_page = explode('friends', $response['paging']['next']); + $apiCall = $next_page[1]; + } else { + $pagedList = false; + } + // Add the new page contacts + $returnedContacts = array_merge($returnedContacts, $response['data']); + } while ($pagedList == true); + $contacts = array(); + foreach ($returnedContacts as $item) { + $uc = new Hybrid_User_Contact(); + $uc->identifier = (array_key_exists("id", $item)) ? $item["id"] : ""; + $uc->displayName = (array_key_exists("name", $item)) ? $item["name"] : ""; + $uc->profileURL = (array_key_exists("link", $item)) ? $item["link"] : "https://www.facebook.com/profile.php?id=" . $uc->identifier; + $uc->photoURL = "https://graph.facebook.com/" . $uc->identifier . "/picture?width=150&height=150"; + $contacts[] = $uc; + } + return $contacts; + } + /** + * Update user status + * + * @param mixed $status An array describing the status, or string + * @param string $pageid (optional) User page id + * @return array + * @throw Exception + */ + function setUserStatus($status, $pageid = null) { + if (!is_array($status)) { + $status = array('message' => $status); + } + if (is_null($pageid)) { + $pageid = 'me'; + // if post on page, get access_token page + } else { + $access_token = null; + foreach ($this->getUserPages(true) as $p) { + if (isset($p['id']) && intval($p['id']) == intval($pageid)) { + $access_token = $p['access_token']; + break; + } + } + if (is_null($access_token)) { + throw new Exception("Update user page failed, page not found or not writable!"); + } + $status['access_token'] = $access_token; + } + try { + $response = $this->api->api('/' . $pageid . '/feed', 'post', $status); + } catch (Exception $e) { + throw new Exception("Update user status failed! {$this->providerId} returned an error {$e->getMessage()}", 0, $e); + } + return $response; + } + /** + * {@inheridoc} + */ + function getUserStatus($postid) { + try { + $postinfo = $this->api->api("/" . $postid); + } catch (Exception $e) { + throw new Exception("Cannot retrieve user status! {$this->providerId} returned an error: {$e->getMessage()}", 0, $e); + } + return $postinfo; + } + /** + * {@inheridoc} + */ + function getUserPages($writableonly = false) { + if (( isset($this->config['scope']) && strpos($this->config['scope'], 'manage_pages') === false ) || (!isset($this->config['scope']) && strpos($this->scope, 'manage_pages') === false )) + throw new Exception("User status requires manage_page permission!"); + try { + $pages = $this->api->api("/me/accounts", 'get'); + } catch (Exception $e) { + throw new Exception("Cannot retrieve user pages! {$this->providerId} returned an error: {$e->getMessage()}", 0, $e); + } + if (!isset($pages['data'])) { + return array(); + } + if (!$writableonly) { + return $pages['data']; + } + $wrpages = array(); + foreach ($pages['data'] as $p) { + if (isset($p['perms']) && in_array('CREATE_CONTENT', $p['perms'])) { + $wrpages[] = $p; + } + } + return $wrpages; + } + /** + * load the user latest activity + * - timeline : all the stream + * - me : the user activity only + * {@inheritdoc} + */ + function getUserActivity($stream) { + try { + if ($stream == "me") { + $response = $this->api->api('/me/feed'); + } else { + $response = $this->api->api('/me/home'); + } + } catch (Exception $e) { + throw new Exception("User activity stream request failed! {$this->providerId} returned an error: {$e->getMessage()}", 0, $e); + } + if (!$response || !count($response['data'])) { + return array(); + } + $activities = array(); + foreach ($response['data'] as $item) { + if ($stream == "me" && $item["from"]["id"] != $this->api->getUser()) { + continue; + } + $ua = new Hybrid_User_Activity(); + $ua->id = (array_key_exists("id", $item)) ? $item["id"] : ""; + $ua->date = (array_key_exists("created_time", $item)) ? strtotime($item["created_time"]) : ""; + if ($item["type"] == "video") { + $ua->text = (array_key_exists("link", $item)) ? $item["link"] : ""; + } + if ($item["type"] == "link") { + $ua->text = (array_key_exists("link", $item)) ? $item["link"] : ""; + } + if (empty($ua->text) && isset($item["story"])) { + $ua->text = (array_key_exists("link", $item)) ? $item["link"] : ""; + } + if (empty($ua->text) && isset($item["message"])) { + $ua->text = (array_key_exists("message", $item)) ? $item["message"] : ""; + } + if (!empty($ua->text)) { + $ua->user->identifier = (array_key_exists("id", $item["from"])) ? $item["from"]["id"] : ""; + $ua->user->displayName = (array_key_exists("name", $item["from"])) ? $item["from"]["name"] : ""; + $ua->user->profileURL = "https://www.facebook.com/profile.php?id=" . $ua->user->identifier; + $ua->user->photoURL = "https://graph.facebook.com/" . $ua->user->identifier . "/picture?type=square"; + $activities[] = $ua; + } + } + return $activities; + } +} \ No newline at end of file diff --git a/plugin/social/Hybrid/Providers/Google.php b/plugin/social/Hybrid/Providers/Google.php new file mode 100644 index 000000000..adb2d5a22 --- /dev/null +++ b/plugin/social/Hybrid/Providers/Google.php @@ -0,0 +1,308 @@ + more infos on google APIs: http://developer.google.com (official site) + * or here: http://discovery-check.appspot.com/ (unofficial but up to date) + * default permissions + * {@inheritdoc} + */ + public $scope = "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/plus.profile.emails.read https://www.google.com/m8/feeds/"; + + /** + * {@inheritdoc} + */ + function initialize() { + parent::initialize(); + + // Provider api end-points + $this->api->authorize_url = "https://accounts.google.com/o/oauth2/auth"; + $this->api->token_url = "https://accounts.google.com/o/oauth2/token"; + $this->api->token_info_url = "https://www.googleapis.com/oauth2/v2/tokeninfo"; + + // Google POST methods require an access_token in the header + $this->api->curl_header = array("Authorization: OAuth " . $this->api->access_token); + + // Override the redirect uri when it's set in the config parameters. This way we prevent + // redirect uri mismatches when authenticating with Google. + if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) { + $this->api->redirect_uri = $this->config['redirect_uri']; + } + } + + /** + * {@inheritdoc} + */ + function loginBegin() { + $parameters = array("scope" => $this->scope, "access_type" => "offline"); + $optionals = array("scope", "access_type", "redirect_uri", "approval_prompt", "hd", "state"); + + foreach ($optionals as $parameter) { + if (isset($this->config[$parameter]) && !empty($this->config[$parameter])) { + $parameters[$parameter] = $this->config[$parameter]; + } + if (isset($this->config["scope"]) && !empty($this->config["scope"])) { + $this->scope = $this->config["scope"]; + } + } + + if (isset($this->config['force']) && $this->config['force'] === true) { + $parameters['approval_prompt'] = 'force'; + } + + Hybrid_Auth::redirect($this->api->authorizeUrl($parameters)); + } + + /** + * {@inheritdoc} + */ + function getUserProfile() { + // refresh tokens if needed + $this->refreshToken(); + + // ask google api for user infos + if (strpos($this->scope, '/auth/plus.profile.emails.read') !== false) { + $verified = $this->api->api("https://www.googleapis.com/plus/v1/people/me"); + + if (!isset($verified->id) || isset($verified->error)) + $verified = new stdClass(); + } else { + $verified = $this->api->api("https://www.googleapis.com/plus/v1/people/me/openIdConnect"); + + if (!isset($verified->sub) || isset($verified->error)) + $verified = new stdClass(); + } + + $response = $this->api->api("https://www.googleapis.com/plus/v1/people/me"); + if (!isset($response->id) || isset($response->error)) { + throw new Exception("User profile request failed! {$this->providerId} returned an invalid response:" . Hybrid_Logger::dumpData( $response ), 6); + } + + $this->user->profile->identifier = (property_exists($verified, 'id')) ? $verified->id : ((property_exists($response, 'id')) ? $response->id : ""); + $this->user->profile->firstName = (property_exists($response, 'name')) ? $response->name->givenName : ""; + $this->user->profile->lastName = (property_exists($response, 'name')) ? $response->name->familyName : ""; + $this->user->profile->displayName = (property_exists($response, 'displayName')) ? $response->displayName : ""; + $this->user->profile->photoURL = (property_exists($response, 'image')) ? ((property_exists($response->image, 'url')) ? substr($response->image->url, 0, -2) . "200" : '') : ''; + $this->user->profile->profileURL = (property_exists($response, 'url')) ? $response->url : ""; + $this->user->profile->description = (property_exists($response, 'aboutMe')) ? $response->aboutMe : ""; + $this->user->profile->gender = (property_exists($response, 'gender')) ? $response->gender : ""; + $this->user->profile->language = (property_exists($response, 'locale')) ? $response->locale : ((property_exists($verified, 'locale')) ? $verified->locale : ""); + $this->user->profile->email = (property_exists($response, 'email')) ? $response->email : ((property_exists($verified, 'email')) ? $verified->email : ""); + $this->user->profile->emailVerified = (property_exists($verified, 'email')) ? $verified->email : ""; + if (property_exists($response, 'emails')) { + if (count($response->emails) == 1) { + $this->user->profile->email = $response->emails[0]->value; + } else { + foreach ($response->emails as $email) { + if ($email->type == 'account') { + $this->user->profile->email = $email->value; + break; + } + } + } + if (property_exists($verified, 'emails')) { + if (count($verified->emails) == 1) { + $this->user->profile->emailVerified = $verified->emails[0]->value; + } else { + foreach ($verified->emails as $email) { + if ($email->type == 'account') { + $this->user->profile->emailVerified = $email->value; + break; + } + } + } + } + } + $this->user->profile->phone = (property_exists($response, 'phone')) ? $response->phone : ""; + $this->user->profile->country = (property_exists($response, 'country')) ? $response->country : ""; + $this->user->profile->region = (property_exists($response, 'region')) ? $response->region : ""; + $this->user->profile->zip = (property_exists($response, 'zip')) ? $response->zip : ""; + if (property_exists($response, 'placesLived')) { + $this->user->profile->city = ""; + $this->user->profile->address = ""; + foreach ($response->placesLived as $c) { + if (property_exists($c, 'primary')) { + if ($c->primary == true) { + $this->user->profile->address = $c->value; + $this->user->profile->city = $c->value; + break; + } + } else { + if (property_exists($c, 'value')) { + $this->user->profile->address = $c->value; + $this->user->profile->city = $c->value; + } + } + } + } + + // google API returns multiple urls, but a "website" only if it is verified + // see http://support.google.com/plus/answer/1713826?hl=en + if (property_exists($response, 'urls')) { + foreach ($response->urls as $u) { + if (property_exists($u, 'primary') && $u->primary == true) + $this->user->profile->webSiteURL = $u->value; + } + } else { + $this->user->profile->webSiteURL = ''; + } + // google API returns age ranges min and/or max as of https://developers.google.com/+/web/api/rest/latest/people#resource + if (property_exists($response, 'ageRange')) { + if (property_exists($response->ageRange, 'min') && property_exists($response->ageRange, 'max')) { + $this->user->profile->age = $response->ageRange->min . ' - ' . $response->ageRange->max; + } else { + if (property_exists($response->ageRange, 'min')) { + $this->user->profile->age = '>= ' . $response->ageRange->min; + } else { + if (property_exists($response->ageRange, 'max')) { + $this->user->profile->age = '<= ' . $response->ageRange->max; + } else { + $this->user->profile->age = ''; + } + } + } + } else { + $this->user->profile->age = ''; + } + // google API returns birthdays only if a user set 'show in my account' + if (property_exists($response, 'birthday')) { + list($birthday_year, $birthday_month, $birthday_day) = explode('-', $response->birthday); + + $this->user->profile->birthDay = (int) $birthday_day; + $this->user->profile->birthMonth = (int) $birthday_month; + $this->user->profile->birthYear = (int) $birthday_year; + } else { + $this->user->profile->birthDay = 0; + $this->user->profile->birthMonth = 0; + $this->user->profile->birthYear = 0; + } + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } + + /** + * {@inheritdoc} + */ + function getUserContacts() { + // refresh tokens if needed + $this->refreshToken(); + + $contacts = array(); + if (!isset($this->config['contacts_param'])) { + $this->config['contacts_param'] = array("max-results" => 500); + } + + // Google Gmail and Android contacts + if (strpos($this->scope, '/m8/feeds/') !== false) { + + $response = $this->api->api("https://www.google.com/m8/feeds/contacts/default/full?" + . http_build_query(array_merge(array('alt' => 'json'), $this->config['contacts_param']))); + + if (!$response) { + return array(); + } + + if (isset($response->feed->entry)) { + foreach ($response->feed->entry as $idx => $entry) { + $uc = new Hybrid_User_Contact(); + $uc->email = isset($entry->{'gd$email'}[0]->address) ? (string) $entry->{'gd$email'}[0]->address : ''; + $uc->displayName = isset($entry->title->{'$t'}) ? (string) $entry->title->{'$t'} : ''; + $uc->identifier = ($uc->email != '') ? $uc->email : ''; + $uc->description = ''; + if (property_exists($entry, 'link')) { + /** + * sign links with access_token + */ + if (is_array($entry->link)) { + foreach ($entry->link as $l) { + if (property_exists($l, 'gd$etag') && $l->type == "image/*") { + $uc->photoURL = $this->addUrlParam($l->href, array('access_token' => $this->api->access_token)); + } else if ($l->type == "self") { + $uc->profileURL = $this->addUrlParam($l->href, array('access_token' => $this->api->access_token)); + } + } + } + } else { + $uc->profileURL = ''; + } + if (property_exists($response, 'website')) { + if (is_array($response->website)) { + foreach ($response->website as $w) { + if ($w->primary == true) + $uc->webSiteURL = $w->value; + } + } else { + $uc->webSiteURL = $response->website->value; + } + } else { + $uc->webSiteURL = ''; + } + + $contacts[] = $uc; + } + } + } + + // Google social contacts + if (strpos($this->scope, '/auth/plus.login') !== false) { + + $response = $this->api->api("https://www.googleapis.com/plus/v1/people/me/people/visible?" + . http_build_query($this->config['contacts_param'])); + + if (!$response) { + return array(); + } + + foreach ($response->items as $idx => $item) { + $uc = new Hybrid_User_Contact(); + $uc->email = (property_exists($item, 'email')) ? $item->email : ''; + $uc->displayName = (property_exists($item, 'displayName')) ? $item->displayName : ''; + $uc->identifier = (property_exists($item, 'id')) ? $item->id : ''; + + $uc->description = (property_exists($item, 'objectType')) ? $item->objectType : ''; + $uc->photoURL = (property_exists($item, 'image')) ? ((property_exists($item->image, 'url')) ? $item->image->url : '') : ''; + $uc->profileURL = (property_exists($item, 'url')) ? $item->url : ''; + $uc->webSiteURL = ''; + + $contacts[] = $uc; + } + } + + return $contacts; + } + + /** + * Add query parameters to the $url + * + * @param string $url URL + * @param array $params Parameters to add + * @return string + */ + function addUrlParam($url, array $params){ + $query = parse_url($url, PHP_URL_QUERY); + + // Returns the URL string with new parameters + if ($query) { + $url .= '&' . http_build_query($params); + } else { + $url .= '?' . http_build_query($params); + } + return $url; + } + +} + diff --git a/plugin/social/Hybrid/Providers/Kakao.php b/plugin/social/Hybrid/Providers/Kakao.php new file mode 100644 index 000000000..1b1130768 --- /dev/null +++ b/plugin/social/Hybrid/Providers/Kakao.php @@ -0,0 +1,177 @@ + + * http://facebook.com/chuckoh + * + * Date: 11 10, 2014 + * Time: 01:51 AM + * + * This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://www.wtfpl.net/txt/copying/ for more details. + * + */ + +//https://github.com/jinseokoh/additional-providers +class Hybrid_Providers_Kakao extends Hybrid_Provider_Model_OAuth2 +{ + /** + * initialization + */ + function initialize() + { + parent::initialize(); + + // Provider API end-points + $this->api->api_base_url = "https://kapi.kakao.com/v1/"; + $this->api->authorize_url = "https://kauth.kakao.com/oauth/authorize"; + $this->api->token_url = "https://kauth.kakao.com/oauth/token"; + + // redirect uri mismatches when authenticating with Kakao. + if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) { + $this->api->redirect_uri = $this->config['redirect_uri']; + } + } + + /** + * finish login step + */ + function loginFinish() + { + $error = (array_key_exists('error', $_REQUEST)) ? $_REQUEST['error'] : ""; + // check for errors + if ( $error ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an error: $error", 5 ); + } + // try to authenicate user + $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : ""; + try{ + $this->authenticate( $code ); + } + catch( Exception $e ){ + throw new Exception( "User profile request failed! {$this->providerId} returned an error: $e", 6 ); + } + // check if authenticated + if ( ! $this->api->access_token ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an invalid access token.", 5 ); + } + // store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + // set user connected locally + $this->setUserConnected(); + } + + /** + * load the user profile + */ + function getUserProfile() + { + $params = array('property_keys'=>'kaccount_email'); + + $this->api->decode_json = false; + $this->api->curl_header = array( 'Authorization: Bearer ' . $this->api->access_token ); + + $data = $this->api->api("user/me", "POST", $params); + + if ( ! isset( $data->id ) ) { + throw new Exception("User profile request failed! {$this->providerId} returned an invalid response.", 6); + } + # store the user profile. + $this->user->profile->identifier = @ $data->id; + $this->user->profile->displayName = @ $data->properties->nickname; + $this->user->profile->photoURL = @ $data->properties->thumbnail_image; + $email = @ $data->kaccount_email; + + if( $email ){ + $this->user->profile->email = $email; + } + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } + + private function authenticate($code) + { + $params = array( + "grant_type" => "authorization_code", + "client_id" => $this->api->client_id, + "redirect_uri" => $this->api->redirect_uri, + "code" => $code + ); + + if( $this->api->client_secret && ($this->api->client_secret !== $this->api->client_id) ){ + $params['client_secret'] = $this->api->client_secret; + } + + $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method); + $response = $this->parseRequestResult($response); + if ( ! $response || ! isset($response->access_token) ) { + throw new Exception("The Authorization Service has return: " . $response->error); + } + if ( isset($response->access_token) ) $this->api->access_token = $response->access_token; + if ( isset($response->refresh_token) ) $this->api->refresh_token = $response->refresh_token; + if ( isset($response->expires_in) ) $this->api->access_token_expires_in = $response->expires_in; + + // calculate when the access token expire + if ( isset($response->expires_in) ) { + $this->api->access_token_expires_at = time() + $response->expires_in; + } + + return $response; + } + + private function request($url, $params=false, $type="GET") + { + if(Class_exists('Hybrid_Logger')){ + Hybrid_Logger::info("Enter OAuth2Client::request( $url )"); + Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize( $params )); + } + $this->http_info = array(); + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL , $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT , $this->api->curl_time_out); + curl_setopt($ch, CURLOPT_USERAGENT , $this->api->curl_useragent); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer); + curl_setopt($ch, CURLOPT_HTTPHEADER , $this->api->curl_header); + + if ( $this->api->curl_proxy ) { + curl_setopt( $ch, CURLOPT_PROXY, $this->curl_proxy); + } + if ( $type == "POST" ) { + curl_setopt($ch, CURLOPT_POST, 1); + if ($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) ); + } + + $response = curl_exec($ch); + if(Class_exists('Hybrid_Logger')){ + Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)) ); + Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize($response )); + } + $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ch)); + curl_close ($ch); + + return $response; + } + + private function parseRequestResult($result) + { + if ( json_decode($result) ) return json_decode($result); + parse_str( $result, $ouput ); + $result = new StdClass(); + foreach( $ouput as $k => $v ) + $result->$k = $v; + + return $result; + } +} \ No newline at end of file diff --git a/plugin/social/Hybrid/Providers/Naver.php b/plugin/social/Hybrid/Providers/Naver.php new file mode 100644 index 000000000..431425b43 --- /dev/null +++ b/plugin/social/Hybrid/Providers/Naver.php @@ -0,0 +1,234 @@ + + * http://facebook.com/chuckoh + * + * Date: 11 11, 2014 + * Time: 11:38 AM + * + * This program is free software. It comes without any warranty, to + * the extent permitted by applicable law. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://www.wtfpl.net/txt/copying/ for more details. + * + */ + +//https://github.com/jinseokoh/additional-providers +class Hybrid_Providers_Naver extends Hybrid_Provider_Model_OAuth2 +{ + /** + * initialization + */ + function initialize() + { + parent::initialize(); + + // Provider API end-points + $this->api->api_base_url = "https://apis.naver.com/nidlogin/"; + $this->api->authorize_url = "https://nid.naver.com/oauth2.0/authorize"; + $this->api->token_url = "https://nid.naver.com/oauth2.0/token"; + + // redirect uri mismatches when authenticating with Naver. + if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) { + $this->api->redirect_uri = $this->config['redirect_uri']; + } + } + + /** + * begin login step + */ + function loginBegin() + { + $token = $this->generate_state_token(); + Hybrid_Auth::storage()->set("naver_state_token", $token); + + $parameters = array( + "response_type" => "code", + "client_id" => $this->api->client_id, + "redirect_uri" => $this->api->redirect_uri, + "state" => $token, + ); + + Hybrid_Auth::redirect($this->api->authorizeUrl($parameters)); + } + + /** + * finish login step + */ + function loginFinish() + { + $error = (array_key_exists('error', $_REQUEST)) ? $_REQUEST['error'] : ""; + // check for errors + if ( $error ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an error: $error", 5 ); + } + // try to authenicate user + $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : ""; + try{ + $this->authenticate( $code ); + } + catch( Exception $e ){ + throw new Exception( "User profile request failed! {$this->providerId} returned an error: $e", 6 ); + } + // check if authenticated + if ( ! $this->api->access_token ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an invalid access token.", 5 ); + } + // store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + // set user connected locally + $this->setUserConnected(); + } + + /** + * set propper headers + */ + function profile($url) { + $this->api->decode_json = false; + $this->api->curl_header = array( 'Authorization: Bearer ' . $this->api->access_token ); + $response = $this->api->get($url, array(), false); + + return $response; + } + + /** + * load the user profile + */ + //https://developers.naver.com/docs/login/profile/ + function getUserProfile() + { + $response = $this->profile("nid/getUserProfile.xml"); + + $xml = @ new SimpleXMLElement($response); + $data = array(); + if ( $xml->result[0]->resultcode == '00' ) { + foreach ($xml->response->children() as $response => $k) { + $data[(string)$response] = (string) $k; + } + } else { + throw new Exception("User profile request failed! {$this->providerId} returned an invalid response.", 6); + } + + # store the user profile. + //$this->user->profile->identifier = (array_key_exists('enc_id',$data))?$data['enc_id']:""; + $this->user->profile->identifier = (array_key_exists('id',$data))?$data['id']:""; + $this->user->profile->age = (array_key_exists('age',$data))?$data['age']:""; + $this->user->profile->displayName = ''; + /* + if( array_key_exists('email',$data) ){ + $tmp = explode("@", $data['email']); + $this->user->profile->displayName = $tmp[0]; + } + */ + $this->user->profile->displayName = (array_key_exists('nickname',$data))?$data['nickname']:""; + $this->user->profile->birthDay = ''; + $this->user->profile->birthMonth = ''; + if( array_key_exists('birthday',$data) ){ + $tmp = explode("-",$data['birthday']); + if( isset($tmp[0]) ){ + $this->user->profile->birthDay = $tmp[0]; + } + if( isset($tmp[1]) ){ + $this->user->profile->birthMonth = $tmp[1]; + } + } + $this->user->profile->email = (array_key_exists('email',$data))?$data['email']:""; + $this->user->profile->emailVerified = (array_key_exists('email',$data))?$data['email']:""; + $this->user->profile->gender = (array_key_exists('gender',$data))?(($data['gender'] == "M")?"male":"female"):""; + $this->user->profile->photoURL = (array_key_exists('profile_image',$data))?$data['profile_image']:""; + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } + + private function authenticate($code) + { + $token = Hybrid_Auth::storage()->get("naver_state_token"); + $params = array( + "grant_type" => "authorization_code", + "client_id" => $this->api->client_id, + "client_secret" => $this->api->client_secret, + // "redirect_uri" => $this->api->redirect_uri, + "code" => $code, + "state" => $token + ); + Hybrid_Auth::storage()->set("naver_state_token", null); + + $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method); + $response = $this->parseRequestResult($response); + if ( ! $response || ! isset($response->access_token) ) { + throw new Exception("The Authorization Service has return: " . $response->error); + } + if ( isset($response->access_token) ) $this->api->access_token = $response->access_token; + if ( isset($response->refresh_token) ) $this->api->refresh_token = $response->refresh_token; + if ( isset($response->expires_in) ) $this->api->access_token_expires_in = $response->expires_in; + + // calculate when the access token expire + if ( isset($response->expires_in) ) { + $this->api->access_token_expires_at = time() + $response->expires_in; + } + + return $response; + } + + private function request($url, $params=false, $type="GET") + { + if(Class_exists('Hybrid_Logger')){ + Hybrid_Logger::info("Enter OAuth2Client::request( $url )"); + Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize( $params )); + } + $this->http_info = array(); + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL , $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT , $this->api->curl_time_out); + curl_setopt($ch, CURLOPT_USERAGENT , $this->api->curl_useragent); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer); + curl_setopt($ch, CURLOPT_HTTPHEADER , $this->api->curl_header); + + if ( $this->api->curl_proxy ) { + curl_setopt( $ch, CURLOPT_PROXY, $this->curl_proxy); + } + if ( $type == "POST" ) { + curl_setopt($ch, CURLOPT_POST, 1); + if ($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) ); + } + + $response = curl_exec($ch); + if(Class_exists('Hybrid_Logger')){ + Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)) ); + Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize($response )); + } + $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ch)); + curl_close ($ch); + + return $response; + } + + private function parseRequestResult($result) + { + if ( json_decode($result) ) return json_decode($result); + parse_str( $result, $ouput ); + $result = new StdClass(); + foreach( $ouput as $k => $v ) + $result->$k = $v; + + return $result; + } + + private function generate_state_token() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); + } +} diff --git a/plugin/social/Hybrid/Providers/Payco.php b/plugin/social/Hybrid/Providers/Payco.php new file mode 100644 index 000000000..c0bb45480 --- /dev/null +++ b/plugin/social/Hybrid/Providers/Payco.php @@ -0,0 +1,212 @@ +api->api_base_url = 'https://id.payco.com/oauth2.0/'; + $this->api->authorize_url = 'https://id.payco.com/oauth2.0/authorize'; + $this->api->token_url = 'https://id.payco.com/oauth2.0/token'; + $this->api->token_info = 'https://apis3.krp.toastoven.net/payco/friends/getIdNoByFriendsToken.json'; + $this->api->profile_url = 'https://apis3.krp.toastoven.net/payco/friends/getMemberProfileByFriendsToken.json'; + + if (!$this->config["keys"]["id"] || !$this->config["keys"]["secret"]) { + throw new Exception("Your application id and secret are required in order to connect to {$this->providerId}.", 4); + } + + // redirect uri mismatches when authenticating with Payco. + if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) { + $this->api->redirect_uri = $this->config['redirect_uri']; + } + } + /** + * {@inheritdoc} + */ + function loginBegin() { + + $token = md5(uniqid(mt_rand(), true)); + Hybrid_Auth::storage()->set('payco_auth_token', $token); + + $parameters = array( + "response_type" => "code", + "client_id" => $this->api->client_id, + "redirect_uri" => $this->api->redirect_uri, + "state" => $token, + "userLocale" => "ko_KR", + "serviceProviderCode" => "FRIENDS", + ); + + Hybrid_Auth::redirect($this->api->authorizeUrl($parameters)); + + exit; + + } + /** + * {@inheritdoc} + */ + function loginFinish() { + + // in case we get error_reason=user_denied&error=access_denied + if (isset($_REQUEST['error']) && $_REQUEST['error'] == "access_denied") { + throw new Exception("Authentication failed! The user denied your request.", 5); + } + + // try to authenicate user + $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : ""; + try{ + $response = $this->api->authenticate( $code ); + } + catch( Exception $e ){ + throw new Exception( "User profile request failed! {$this->providerId} returned an error: $e", 6 ); + } + + // check if authenticated + if ( ! $this->api->authenticated() ){ + throw new Exception( "Authentication failed! {$this->providerId} returned an invalid access token.", 5 ); + } + // store tokens + $this->token("access_token", $this->api->access_token); + $this->token("refresh_token", $this->api->refresh_token); + $this->token("expires_in", $this->api->access_token_expires_in); + $this->token("expires_at", $this->api->access_token_expires_at); + + $this->setUserConnected(); + + } + + function check_valid_access_token(){ + + $params = array( + 'body' => array( + 'client_id'=>$this->api->client_id, + 'access_token'=>$this->api->access_token, + ), + ); + + $this->api->curl_header = array( + + 'Content-Type:application/json', + 'client_id: '.$this->api->client_id, + 'access_token: '.$this->api->access_token, + + ); + + $response = $this->api->api( $this->api->token_info, 'POST', $params ); + + if( is_object($response) && !empty($response->idNo) && $response->header->successful ){ + $this->idNo = $response->idNo; + + return true; + } + + return false; + } + + /** + * {@inheritdoc} + */ + function logout() { + parent::logout(); + } + /** + * {@inheritdoc} + */ + + /** + * set propper headers + */ + function getUserProfile() { + + $data = null; + + // request user profile + try { + + if( $this->check_valid_access_token() ){ + $params = array( + 'body' => array( + 'client_id'=>$this->api->client_id, + 'access_token'=>$this->api->access_token, + 'MemberProfile'=>'idNo,id,name', + 'idNo'=>$this->idNo, + ), + ); + + $this->api->curl_header = array( + 'Content-Type:application/json', + 'client_id: '.$this->api->client_id, + 'access_token: '.$this->api->access_token, + 'Authorization: Bearer ' . $this->api->access_token, + ); + + $response = $this->api->api( $this->api->profile_url, 'POST', $params ); + } + + } catch (Exception $e) { + throw new Exception("User profile request failed! {$this->providerId} returned an error: {$e->getMessage()}", 6, $e); + } + + if( ! is_object($response) || property_exists($response, 'error_code') ){ + $this->logout(); + + throw new Exception( "Authentication failed! {$this->providerId} returned an invalid access token.", 5 ); + } + + if( is_object($response) ){ + $result = json_decode(json_encode($response), true); + $data = $result['memberProfile']; + } + + // if the provider identifier is not received, we assume the auth has failed + if (!isset($data["id"])) { + $this->logout(); + throw new Exception("User profile request failed! {$this->providerId} api returned an invalid response: " . Hybrid_Logger::dumpData( $data ), 6); + } + + # store the user profile. + $this->user->profile->identifier = (array_key_exists('idNo', $data)) ? $data['idNo'] : ""; + $this->user->profile->username = (array_key_exists('name', $data)) ? $data['name'] : ""; + $this->user->profile->displayName = (array_key_exists('name', $data)) ? $data['name'] : ""; + $this->user->profile->age = (array_key_exists('ageGroup', $data)) ? $data['ageGroup'] : ""; + + include_once(G5_LIB_PATH.'/register.lib.php'); + + $payco_no = substr(base_convert($this->user->profile->identifier, 16, 36), 0, 16); + $email = (array_key_exists('id', $data)) ? $data['id'] : ""; + + $this->user->profile->gender = (array_key_exists('sexCode', $data)) ? $data['sexCode'] : ""; + + $this->user->profile->email = ! valid_mb_email($email) ? $email : ""; + $this->user->profile->emailVerified = ! valid_mb_email($email) ? $email : ""; + + + if (array_key_exists('birthdayMMdd', $data)) { + $this->user->profile->birthMonth = substr($data['birthdayMMdd'], 0, 2); + $this->user->profile->birthDay = substr($data['birthdayMMdd'], 2, 4); + } + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } //end function getUserProfile + +} \ No newline at end of file diff --git a/plugin/social/Hybrid/Providers/Twitter.php b/plugin/social/Hybrid/Providers/Twitter.php new file mode 100644 index 000000000..cb1c1706b --- /dev/null +++ b/plugin/social/Hybrid/Providers/Twitter.php @@ -0,0 +1,266 @@ +api->api_base_url = "https://api.twitter.com/1.1/"; + $this->api->authorize_url = "https://api.twitter.com/oauth/authenticate"; + $this->api->request_token_url = "https://api.twitter.com/oauth/request_token"; + $this->api->access_token_url = "https://api.twitter.com/oauth/access_token"; + + if (isset($this->config['api_version']) && $this->config['api_version']) { + $this->api->api_base_url = "https://api.twitter.com/{$this->config['api_version']}/"; + } + + if (isset($this->config['authorize']) && $this->config['authorize']) { + $this->api->authorize_url = "https://api.twitter.com/oauth/authorize"; + } + + $this->api->curl_auth_header = false; + } + + /** + * {@inheritdoc} + */ + function loginBegin() { + // Initiate the Reverse Auth flow; cf. https://dev.twitter.com/docs/ios/using-reverse-auth + if (isset($_REQUEST['reverse_auth']) && ($_REQUEST['reverse_auth'] == 'yes')) { + $stage1 = $this->api->signedRequest($this->api->request_token_url, 'POST', array('x_auth_mode' => 'reverse_auth')); + if ($this->api->http_code != 200) { + throw new Exception("Authentication failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code), 5); + } + $responseObj = array('x_reverse_auth_parameters' => $stage1, 'x_reverse_auth_target' => $this->config["keys"]["key"]); + $response = json_encode($responseObj); + header("Content-Type: application/json", true, 200); + echo $response; + die(); + } + $tokens = $this->api->requestToken($this->endpoint); + + // request tokens as received from provider + $this->request_tokens_raw = $tokens; + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("Authentication failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code), 5); + } + + if (!isset($tokens["oauth_token"])) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid oauth token.", 5); + } + + $this->token("request_token", $tokens["oauth_token"]); + $this->token("request_token_secret", $tokens["oauth_token_secret"]); + + // redirect the user to the provider authentication url with force_login + if (( isset($this->config['force_login']) && $this->config['force_login'] ) || ( isset($this->config['force']) && $this->config['force'] === true )) { + Hybrid_Auth::redirect($this->api->authorizeUrl($tokens, array('force_login' => true))); + } + + // else, redirect the user to the provider authentication url + Hybrid_Auth::redirect($this->api->authorizeUrl($tokens)); + } + + /** + * {@inheritdoc} + */ + function loginFinish() { + // in case we are completing a Reverse Auth flow; cf. https://dev.twitter.com/docs/ios/using-reverse-auth + if (isset($_REQUEST['oauth_token_secret'])) { + $tokens = $_REQUEST; + $this->access_tokens_raw = $tokens; + + // we should have an access_token unless something has gone wrong + if (!isset($tokens["oauth_token"])) { + throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5); + } + + // Get rid of tokens we don't need + $this->deleteToken("request_token"); + $this->deleteToken("request_token_secret"); + + // Store access_token and secret for later use + $this->token("access_token", $tokens['oauth_token']); + $this->token("access_token_secret", $tokens['oauth_token_secret']); + + // set user as logged in to the current provider + $this->setUserConnected(); + return; + } + parent::loginFinish(); + } + + /** + * {@inheritdoc} + */ + function getUserProfile() { + $includeEmail = isset($this->config['includeEmail']) ? (bool) $this->config['includeEmail'] : false; + $response = $this->api->get('account/verify_credentials.json'. ($includeEmail ? '?include_email=true' : '')); + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("User profile request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code), 6); + } + + if (!is_object($response) || !isset($response->id)) { + throw new Exception("User profile request failed! {$this->providerId} api returned an invalid response: " . Hybrid_Logger::dumpData( $response ), 6); + } + + # store the user profile. + $this->user->profile->identifier = (property_exists($response, 'id')) ? $response->id : ""; + $this->user->profile->displayName = (property_exists($response, 'screen_name')) ? $response->screen_name : ""; + $this->user->profile->description = (property_exists($response, 'description')) ? $response->description : ""; + $this->user->profile->firstName = (property_exists($response, 'name')) ? $response->name : ""; + $this->user->profile->photoURL = (property_exists($response, 'profile_image_url')) ? (str_replace('_normal', '', $response->profile_image_url)) : ""; + $this->user->profile->profileURL = (property_exists($response, 'screen_name')) ? ("http://twitter.com/" . $response->screen_name) : ""; + $this->user->profile->webSiteURL = (property_exists($response, 'url')) ? $response->url : ""; + $this->user->profile->region = (property_exists($response, 'location')) ? $response->location : ""; + if($includeEmail) $this->user->profile->email = (property_exists($response, 'email')) ? $response->email : ""; + if($includeEmail) $this->user->profile->emailVerified = (property_exists($response, 'email')) ? $response->email : ""; + + $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId ); + + return $this->user->profile; + } + + /** + * {@inheritdoc} + */ + function getUserContacts() { + $parameters = array('cursor' => '-1'); + $response = $this->api->get('friends/ids.json', $parameters); + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("User contacts request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); + } + + if (!$response || !count($response->ids)) { + return array(); + } + + // 75 id per time should be okey + $contactsids = array_chunk($response->ids, 75); + + $contacts = array(); + + foreach ($contactsids as $chunk) { + $parameters = array('user_id' => implode(",", $chunk)); + $response = $this->api->get('users/lookup.json', $parameters); + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("User contacts request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); + } + + if ($response && count($response)) { + foreach ($response as $item) { + $uc = new Hybrid_User_Contact(); + + $uc->identifier = (property_exists($item, 'id')) ? $item->id : ""; + $uc->displayName = (property_exists($item, 'name')) ? $item->name : ""; + $uc->profileURL = (property_exists($item, 'screen_name')) ? ("http://twitter.com/" . $item->screen_name) : ""; + $uc->photoURL = (property_exists($item, 'profile_image_url')) ? $item->profile_image_url : ""; + $uc->description = (property_exists($item, 'description')) ? $item->description : ""; + + $contacts[] = $uc; + } + } + } + + return $contacts; + } + + /** + * {@inheritdoc} + */ + function setUserStatus($status) { + + if (is_array($status) && isset($status['message']) && isset($status['picture'])) { + $response = $this->api->post('statuses/update_with_media.json', array('status' => $status['message'], 'media[]' => file_get_contents($status['picture'])), null, null, true); + } else { + $response = $this->api->post('statuses/update.json', array('status' => $status)); + } + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("Update user status failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); + } + + return $response; + } + + /** + * {@inheritdoc} + */ + function getUserStatus($tweetid) { + $info = $this->api->get('statuses/show.json?id=' . $tweetid . '&include_entities=true'); + + // check the last HTTP status code returned + if ($this->api->http_code != 200 || !isset($info->id)) { + throw new Exception("Cannot retrieve user status! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); + } + + return $info; + } + + /** + * load the user latest activity + * - timeline : all the stream + * - me : the user activity only + * + * by default return the timeline + * {@inheritdoc} + */ + function getUserActivity($stream) { + if ($stream == "me") { + $response = $this->api->get('statuses/user_timeline.json'); + } else { + $response = $this->api->get('statuses/home_timeline.json'); + } + + // check the last HTTP status code returned + if ($this->api->http_code != 200) { + throw new Exception("User activity stream request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus($this->api->http_code)); + } + + if (!$response) { + return array(); + } + + $activities = array(); + + foreach ($response as $item) { + $ua = new Hybrid_User_Activity(); + + $ua->id = (property_exists($item, 'id')) ? $item->id : ""; + $ua->date = (property_exists($item, 'created_at')) ? strtotime($item->created_at) : ""; + $ua->text = (property_exists($item, 'text')) ? $item->text : ""; + + $ua->user->identifier = (property_exists($item->user, 'id')) ? $item->user->id : ""; + $ua->user->displayName = (property_exists($item->user, 'name')) ? $item->user->name : ""; + $ua->user->profileURL = (property_exists($item->user, 'screen_name')) ? ("http://twitter.com/" . $item->user->screen_name) : ""; + $ua->user->photoURL = (property_exists($item->user, 'profile_image_url')) ? $item->user->profile_image_url : ""; + + $activities[] = $ua; + } + + return $activities; + } + +} diff --git a/plugin/social/Hybrid/Storage.php b/plugin/social/Hybrid/Storage.php new file mode 100644 index 000000000..16a2f6cb2 --- /dev/null +++ b/plugin/social/Hybrid/Storage.php @@ -0,0 +1,141 @@ +config("php_session_id", session_id()); + $this->config("version", Hybrid_Auth::$version); + } + + /** + * Saves a value in the config storage, or returns config if value is null + * + * @param string $key Config name + * @param string $value Config value + * @return array|null + */ + public function config($key, $value = null) { + $key = strtolower($key); + + if ($value) { + $_SESSION["HA::CONFIG"][$key] = serialize($value); + } elseif (isset($_SESSION["HA::CONFIG"][$key])) { + return unserialize($_SESSION["HA::CONFIG"][$key]); + } + + return null; + } + + /** + * Returns value from session storage + * + * @param string $key Key + * @return string|null + */ + public function get($key) { + $key = strtolower($key); + + if (isset($_SESSION["HA::STORE"], $_SESSION["HA::STORE"][$key])) { + return unserialize($_SESSION["HA::STORE"][$key]); + } + + return null; + } + + /** + * Saves a key value pair to the session storage + * + * @param string $key Key + * @param string $value Value + * @return void + */ + public function set($key, $value) { + $key = strtolower($key); + $_SESSION["HA::STORE"][$key] = serialize($value); + } + + /** + * Clear session storage + * @return void + */ + function clear() { + $_SESSION["HA::STORE"] = array(); + } + + /** + * Delete a specific key from session storage + * + * @param string $key Key + * @return void + */ + function delete($key) { + $key = strtolower($key); + + if (isset($_SESSION["HA::STORE"], $_SESSION["HA::STORE"][$key])) { + $f = $_SESSION['HA::STORE']; + unset($f[$key]); + $_SESSION["HA::STORE"] = $f; + } + } + + /** + * Delete all keys recursively from session storage + * + * @param string $key Key + * @retun void + */ + function deleteMatch($key) { + $key = strtolower($key); + + if (isset($_SESSION["HA::STORE"]) && count($_SESSION["HA::STORE"])) { + $f = $_SESSION['HA::STORE']; + foreach ($f as $k => $v) { + if (strstr($k, $key)) { + unset($f[$k]); + } + } + $_SESSION["HA::STORE"] = $f; + } + } + + /** + * Returns session storage as a serialized string + * @return string|null + */ + function getSessionData() { + if (isset($_SESSION["HA::STORE"])) { + return serialize($_SESSION["HA::STORE"]); + } + return null; + } + + /** + * Restores the session from serialized session data + * + * @param string $sessiondata Serialized session data + * @return void + */ + function restoreSessionData($sessiondata = null) { + $_SESSION["HA::STORE"] = unserialize($sessiondata); + } + +} diff --git a/plugin/social/Hybrid/StorageInterface.php b/plugin/social/Hybrid/StorageInterface.php new file mode 100644 index 000000000..5b171ec3a --- /dev/null +++ b/plugin/social/Hybrid/StorageInterface.php @@ -0,0 +1,29 @@ +timestamp = time(); + $this->profile = new Hybrid_User_Profile(); + } + +} diff --git a/plugin/social/Hybrid/User_Activity.php b/plugin/social/Hybrid/User_Activity.php new file mode 100644 index 000000000..5d0712ab6 --- /dev/null +++ b/plugin/social/Hybrid/User_Activity.php @@ -0,0 +1,55 @@ +user = new stdClass(); + + // typically, we should have a few information about the user who created the event from social apis + $this->user->identifier = null; + $this->user->displayName = null; + $this->user->profileURL = null; + $this->user->photoURL = null; + } + +} diff --git a/plugin/social/Hybrid/User_Contact.php b/plugin/social/Hybrid/User_Contact.php new file mode 100644 index 000000000..976595835 --- /dev/null +++ b/plugin/social/Hybrid/User_Contact.php @@ -0,0 +1,60 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/plugin/social/Hybrid/resources/index.html b/plugin/social/Hybrid/resources/index.html new file mode 100644 index 000000000..c942a79ce --- /dev/null +++ b/plugin/social/Hybrid/resources/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/plugin/social/Hybrid/resources/openid_policy.html b/plugin/social/Hybrid/resources/openid_policy.html new file mode 100644 index 000000000..01462daec --- /dev/null +++ b/plugin/social/Hybrid/resources/openid_policy.html @@ -0,0 +1,10 @@ + + + OpenID Policy + + + + + \ No newline at end of file diff --git a/plugin/social/Hybrid/resources/openid_realm.html b/plugin/social/Hybrid/resources/openid_realm.html new file mode 100644 index 000000000..78b1b1d62 --- /dev/null +++ b/plugin/social/Hybrid/resources/openid_realm.html @@ -0,0 +1,13 @@ + + + HybridAuth Endpoint + + + + +

      HybridAuth

      + Open Source Social Sign On PHP Library. +
      + hybridauth.sourceforge.net/ + + diff --git a/plugin/social/Hybrid/resources/openid_xrds.xml b/plugin/social/Hybrid/resources/openid_xrds.xml new file mode 100644 index 000000000..ab94e5c01 --- /dev/null +++ b/plugin/social/Hybrid/resources/openid_xrds.xml @@ -0,0 +1,12 @@ + + + + + http://specs.openid.net/auth/2.0/return_to + {RETURN_TO_URL} + + + \ No newline at end of file diff --git a/plugin/social/Hybrid/thirdparty/OAuth/OAuth.php b/plugin/social/Hybrid/thirdparty/OAuth/OAuth.php new file mode 100644 index 000000000..876665fae --- /dev/null +++ b/plugin/social/Hybrid/thirdparty/OAuth/OAuth.php @@ -0,0 +1,901 @@ +key = $key; + $this->secret = $secret; + $this->callback_url = $callback_url; + } + + function __toString() { + return "OAuthConsumer[key=$this->key,secret=$this->secret]"; + } +} + +class OAuthToken { + // access tokens and request tokens + public $key; + public $secret; + + /** + * key = the token + * secret = the token secret + */ + function __construct($key, $secret) { + $this->key = $key; + $this->secret = $secret; + } + + /** + * generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + */ + function to_string() { + return "oauth_token=" . + OAuthUtil::urlencode_rfc3986($this->key) . + "&oauth_token_secret=" . + OAuthUtil::urlencode_rfc3986($this->secret); + } + + function __toString() { + return $this->to_string(); + } +} + +/** + * A class for implementing a Signature Method + * See section 9 ("Signing Requests") in the spec + */ +abstract class OAuthSignatureMethod { + /** + * Needs to return the name of the Signature Method (ie HMAC-SHA1) + * @return string + */ + abstract public function get_name(); + + /** + * Build up the signature + * NOTE: The output of this function MUST NOT be urlencoded. + * the encoding is handled in OAuthRequest when the final + * request is serialized + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @return string + */ + abstract public function build_signature($request, $consumer, $token); + + /** + * Verifies that a given signature is correct + * @param OAuthRequest $request + * @param OAuthConsumer $consumer + * @param OAuthToken $token + * @param string $signature + * @return bool + */ + public function check_signature($request, $consumer, $token, $signature) { + $built = $this->build_signature($request, $consumer, $token); + + // Check for zero length, although unlikely here + if (strlen($built) == 0 || strlen($signature) == 0) { + return false; + } + + if (strlen($built) != strlen($signature)) { + return false; + } + + // Avoid a timing leak with a (hopefully) time insensitive compare + $result = 0; + for ($i = 0; $i < strlen($signature); $i++) { + $result |= ord($built{$i}) ^ ord($signature{$i}); + } + + return $result == 0; + } +} + +/** + * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] + * where the Signature Base String is the text and the key is the concatenated values (each first + * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' + * character (ASCII code 38) even if empty. + * - Chapter 9.2 ("HMAC-SHA1") + */ +class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { + function get_name() { + return "HMAC-SHA1"; + } + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + + return base64_encode(hash_hmac('sha1', $base_string, $key, true)); + } +} + +/** + * The PLAINTEXT method does not provide any security protection and SHOULD only be used + * over a secure channel such as HTTPS. It does not use the Signature Base String. + * - Chapter 9.4 ("PLAINTEXT") + */ +class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { + public function get_name() { + return "PLAINTEXT"; + } + + /** + * oauth_signature is set to the concatenated encoded values of the Consumer Secret and + * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is + * empty. The result MUST be encoded again. + * - Chapter 9.4.1 ("Generating Signatures") + * + * Please note that the second encoding MUST NOT happen in the SignatureMethod, as + * OAuthRequest handles this! + */ + public function build_signature($request, $consumer, $token) { + $key_parts = array( + $consumer->secret, + ($token) ? $token->secret : "" + ); + + $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); + $key = implode('&', $key_parts); + $request->base_string = $key; + + return $key; + } +} + +/** + * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in + * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for + * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a + * verified way to the Service Provider, in a manner which is beyond the scope of this + * specification. + * - Chapter 9.3 ("RSA-SHA1") + */ +abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { + public function get_name() { + return "RSA-SHA1"; + } + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // (2) fetch via http using a url provided by the requester + // (3) some sort of specific discovery code based on request + // + // Either way should return a string representation of the certificate + protected abstract function fetch_public_cert(&$request); + + // Up to the SP to implement this lookup of keys. Possible ideas are: + // (1) do a lookup in a table of trusted certs keyed off of consumer + // + // Either way should return a string representation of the certificate + protected abstract function fetch_private_cert(&$request); + + public function build_signature($request, $consumer, $token) { + $base_string = $request->get_signature_base_string(); + $request->base_string = $base_string; + + // Fetch the private key cert based on the request + $cert = $this->fetch_private_cert($request); + + // Pull the private key ID from the certificate + $privatekeyid = openssl_get_privatekey($cert); + + // Sign using the key + $ok = openssl_sign($base_string, $signature, $privatekeyid); + + // Release the key resource + openssl_free_key($privatekeyid); + + return base64_encode($signature); + } + + public function check_signature($request, $consumer, $token, $signature) { + $decoded_sig = base64_decode($signature); + + $base_string = $request->get_signature_base_string(); + + // Fetch the public key cert based on the request + $cert = $this->fetch_public_cert($request); + + // Pull the public key ID from the certificate + $publickeyid = openssl_get_publickey($cert); + + // Check the computed signature against the one passed in the query + $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); + + // Release the key resource + openssl_free_key($publickeyid); + + return $ok == 1; + } +} + +class OAuthRequest { + protected $parameters; + protected $http_method; + protected $http_url; + // for debug purposes + public $base_string; + public static $version = '1.0'; + public static $POST_INPUT = 'php://input'; + + function __construct($http_method, $http_url, $parameters=null) { + $parameters = ($parameters) ? $parameters : array(); + $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); + $this->parameters = $parameters; + $this->http_method = $http_method; + $this->http_url = $http_url; + } + + + /** + * attempt to build up a request from what was passed to the server + */ + public static function from_request($http_method=null, $http_url=null, $parameters=null) { + $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") + ? 'http' + : 'https'; + if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { + $scheme = $_SERVER['HTTP_X_FORWARDED_PROTO']; + } + $http_url = ($http_url) ? $http_url : $scheme . + '://' . $_SERVER['SERVER_NAME'] . + ':' . + $_SERVER['SERVER_PORT'] . + $_SERVER['REQUEST_URI']; + $http_method = ($http_method) ? $http_method : $_SERVER['REQUEST_METHOD']; + + // We weren't handed any parameters, so let's find the ones relevant to + // this request. + // If you run XML-RPC or similar you should use this to provide your own + // parsed parameter-list + if (!$parameters) { + // Find request headers + $request_headers = OAuthUtil::get_headers(); + + // Parse the query-string to find GET parameters + $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); + + // It's a POST request of the proper content-type, so parse POST + // parameters and add those overriding any duplicates from GET + if ($http_method == "POST" + && isset($request_headers['Content-Type']) + && strstr($request_headers['Content-Type'], + 'application/x-www-form-urlencoded') + ) { + $post_data = OAuthUtil::parse_parameters( + file_get_contents(self::$POST_INPUT) + ); + $parameters = array_merge($parameters, $post_data); + } + + // We have a Authorization-header with OAuth data. Parse the header + // and add those overriding any duplicates from GET or POST + if (isset($request_headers['Authorization']) && substr($request_headers['Authorization'], 0, 6) == 'OAuth ') { + $header_parameters = OAuthUtil::split_header( + $request_headers['Authorization'] + ); + $parameters = array_merge($parameters, $header_parameters); + } + + } + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + /** + * pretty much a helper function to set up the request + */ + public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=null) { + $parameters = ($parameters) ? $parameters : array(); + $defaults = array("oauth_version" => OAuthRequest::$version, + "oauth_nonce" => OAuthRequest::generate_nonce(), + "oauth_timestamp" => OAuthRequest::generate_timestamp(), + "oauth_consumer_key" => $consumer->key); + if ($token) + $defaults['oauth_token'] = $token->key; + + $parameters = array_merge($defaults, $parameters); + + return new OAuthRequest($http_method, $http_url, $parameters); + } + + public function set_parameter($name, $value, $allow_duplicates = true) { + if ($allow_duplicates && isset($this->parameters[$name])) { + // We have already added parameter(s) with this name, so add to the list + if (is_scalar($this->parameters[$name])) { + // This is the first duplicate, so transform scalar (string) + // into an array so we can add the duplicates + $this->parameters[$name] = array($this->parameters[$name]); + } + + $this->parameters[$name][] = $value; + } else { + $this->parameters[$name] = $value; + } + } + + public function get_parameter($name) { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + public function get_parameters() { + return $this->parameters; + } + + public function unset_parameter($name) { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * @return string + */ + public function get_signable_parameters() { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return OAuthUtil::build_http_query($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + */ + public function get_signature_base_string() { + $parts = array( + $this->get_normalized_http_method(), + $this->get_normalized_http_url(), + $this->get_signable_parameters() + ); + + $parts = OAuthUtil::urlencode_rfc3986($parts); + + return implode('&', $parts); + } + + /** + * just uppercases the http method + */ + public function get_normalized_http_method() { + return strtoupper($this->http_method); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + */ + public function get_normalized_http_url() { + $parts = parse_url($this->http_url); + + $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http'; + $port = (isset($parts['port'])) ? $parts['port'] : (($scheme == 'https') ? '443' : '80'); + $host = (isset($parts['host'])) ? strtolower($parts['host']) : ''; + $path = (isset($parts['path'])) ? $parts['path'] : ''; + + if (($scheme == 'https' && $port != '443') + || ($scheme == 'http' && $port != '80')) { + $host = "$host:$port"; + } + return "$scheme://$host$path"; + } + + /** + * builds a url usable for a GET request + */ + public function to_url() { + $post_data = $this->to_postdata(); + $out = $this->get_normalized_http_url(); + if ($post_data) { + $out .= '?'.$post_data; + } + return $out; + } + + /** + * builds the data one would send in a POST request + */ + public function to_postdata() { + return OAuthUtil::build_http_query($this->parameters); + } + + /** + * builds the Authorization: header + */ + public function to_header($realm=null) { + $first = true; + if($realm) { + $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; + $first = false; + } else + $out = 'Authorization: OAuth'; + + $total = array(); + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") continue; + if (is_array($v)) { + throw new OAuthException('arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ','; + $out .= OAuthUtil::urlencode_rfc3986($k) . + '="' . + OAuthUtil::urlencode_rfc3986($v) . + '"'; + $first = false; + } + return $out; + } + + public function __toString() { + return $this->to_url(); + } + + + public function sign_request($signature_method, $consumer, $token) { + $this->set_parameter( + "oauth_signature_method", + $signature_method->get_name(), + false + ); + $signature = $this->build_signature($signature_method, $consumer, $token); + $this->set_parameter("oauth_signature", $signature, false); + } + + public function build_signature($signature_method, $consumer, $token) { + $signature = $signature_method->build_signature($this, $consumer, $token); + return $signature; + } + + /** + * util function: current timestamp + */ + private static function generate_timestamp() { + return time(); + } + + /** + * util function: current nonce + */ + private static function generate_nonce() { + $mt = microtime(); + $rand = mt_rand(); + + return md5($mt . $rand); // md5s look nicer than numbers + } +} + +class OAuthServer { + protected $timestamp_threshold = 300; // in seconds, five minutes + protected $version = '1.0'; // hi blaine + protected $signature_methods = array(); + + protected $data_store; + + function __construct($data_store) { + $this->data_store = $data_store; + } + + public function add_signature_method($signature_method) { + $this->signature_methods[$signature_method->get_name()] = + $signature_method; + } + + // high level functions + + /** + * process a request_token request + * returns the request token on success + */ + public function fetch_request_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // no token required for the initial token request + $token = null; + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $callback = $request->get_parameter('oauth_callback'); + $new_token = $this->data_store->new_request_token($consumer, $callback); + + return $new_token; + } + + /** + * process an access_token request + * returns the access token on success + */ + public function fetch_access_token(&$request) { + $this->get_version($request); + + $consumer = $this->get_consumer($request); + + // requires authorized request token + $token = $this->get_token($request, $consumer, "request"); + + $this->check_signature($request, $consumer, $token); + + // Rev A change + $verifier = $request->get_parameter('oauth_verifier'); + $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); + + return $new_token; + } + + /** + * verify an api call, checks all the parameters + */ + public function verify_request(&$request) { + $this->get_version($request); + $consumer = $this->get_consumer($request); + $token = $this->get_token($request, $consumer, "access"); + $this->check_signature($request, $consumer, $token); + return array($consumer, $token); + } + + // Internals from here + /** + * version 1 + */ + private function get_version(&$request) { + $version = $request->get_parameter("oauth_version"); + if (!$version) { + // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. + // Chapter 7.0 ("Accessing Protected Ressources") + $version = '1.0'; + } + if ($version !== $this->version) { + throw new OAuthException("OAuth version '$version' not supported"); + } + return $version; + } + + /** + * figure out the signature with some defaults + */ + private function get_signature_method($request) { + $signature_method = $request instanceof OAuthRequest + ? $request->get_parameter("oauth_signature_method") + : null; + + if (!$signature_method) { + // According to chapter 7 ("Accessing Protected Ressources") the signature-method + // parameter is required, and we can't just fallback to PLAINTEXT + throw new OAuthException('No signature method parameter. This parameter is required'); + } + + if (!in_array($signature_method, + array_keys($this->signature_methods))) { + throw new OAuthException( + "Signature method '$signature_method' not supported " . + "try one of the following: " . + implode(", ", array_keys($this->signature_methods)) + ); + } + return $this->signature_methods[$signature_method]; + } + + /** + * try to find the consumer for the provided request's consumer key + */ + private function get_consumer($request) { + $consumer_key = $request instanceof OAuthRequest + ? $request->get_parameter("oauth_consumer_key") + : null; + + if (!$consumer_key) { + throw new OAuthException("Invalid consumer key"); + } + + $consumer = $this->data_store->lookup_consumer($consumer_key); + if (!$consumer) { + throw new OAuthException("Invalid consumer"); + } + + return $consumer; + } + + /** + * try to find the token for the provided request's token key + */ + private function get_token($request, $consumer, $token_type="access") { + $token_field = $request instanceof OAuthRequest + ? $request->get_parameter('oauth_token') + : null; + + $token = $this->data_store->lookup_token( + $consumer, $token_type, $token_field + ); + if (!$token) { + throw new OAuthException("Invalid $token_type token: $token_field"); + } + return $token; + } + + /** + * all-in-one function to check the signature on a request + * should guess the signature method appropriately + */ + private function check_signature($request, $consumer, $token) { + // this should probably be in a different method + $timestamp = $request instanceof OAuthRequest + ? $request->get_parameter('oauth_timestamp') + : null; + $nonce = $request instanceof OAuthRequest + ? $request->get_parameter('oauth_nonce') + : null; + + $this->check_timestamp($timestamp); + $this->check_nonce($consumer, $token, $nonce, $timestamp); + + $signature_method = $this->get_signature_method($request); + + $signature = $request->get_parameter('oauth_signature'); + $valid_sig = $signature_method->check_signature( + $request, + $consumer, + $token, + $signature + ); + + if (!$valid_sig) { + throw new OAuthException("Invalid signature"); + } + } + + /** + * check that the timestamp is new enough + */ + private function check_timestamp($timestamp) { + if( ! $timestamp ) + throw new OAuthException( + 'Missing timestamp parameter. The parameter is required' + ); + + // verify that timestamp is recentish + $now = time(); + if (abs($now - $timestamp) > $this->timestamp_threshold) { + throw new OAuthException( + "Expired timestamp, yours $timestamp, ours $now" + ); + } + } + + /** + * check that the nonce is not repeated + */ + private function check_nonce($consumer, $token, $nonce, $timestamp) { + if( ! $nonce ) + throw new OAuthException( + 'Missing nonce parameter. The parameter is required' + ); + + // verify that the nonce is uniqueish + $found = $this->data_store->lookup_nonce( + $consumer, + $token, + $nonce, + $timestamp + ); + if ($found) { + throw new OAuthException("Nonce already used: $nonce"); + } + } + +} + +class OAuthDataStore { + function lookup_consumer($consumer_key) { + // implement me + } + + function lookup_token($consumer, $token_type, $token) { + // implement me + } + + function lookup_nonce($consumer, $token, $nonce, $timestamp) { + // implement me + } + + function new_request_token($consumer, $callback = null) { + // return a new token attached to this consumer + } + + function new_access_token($token, $consumer, $verifier = null) { + // return a new access token attached to this consumer + // for the user associated with this token if the request token + // is authorized + // should also invalidate the request token + } + +} + +class OAuthUtil { + public static function urlencode_rfc3986($input) { + if (is_array($input)) { + return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); + } else if (is_scalar($input)) { + return str_replace( + '+', + ' ', + str_replace('%7E', '~', rawurlencode($input)) + ); + } else { + return ''; + } +} + + + // This decode function isn't taking into consideration the above + // modifications to the encoding process. However, this method doesn't + // seem to be used anywhere so leaving it as is. + public static function urldecode_rfc3986($string) { + return urldecode($string); + } + + // Utility function for turning the Authorization: header into + // parameters, has to do some unescaping + // Can filter out any non-oauth parameters if needed (default behaviour) + // May 28th, 2010 - method updated to tjerk.meesters for a speed improvement. + // see http://code.google.com/p/oauth/issues/detail?id=163 + public static function split_header($header, $only_allow_oauth_parameters = true) { + $params = array(); + if (preg_match_all('/('.($only_allow_oauth_parameters ? 'oauth_' : '').'[a-z_-]*)=(:?"([^"]*)"|([^,]*))/', $header, $matches)) { + foreach ($matches[1] as $i => $h) { + $params[$h] = OAuthUtil::urldecode_rfc3986(empty($matches[3][$i]) ? $matches[4][$i] : $matches[3][$i]); + } + if (isset($params['realm'])) { + unset($params['realm']); + } + } + return $params; + } + + // helper to try to sort out headers for people who aren't running apache + public static function get_headers() { + if (function_exists('apache_request_headers')) { + // we need this to get the actual Authorization: header + // because apache tends to tell us it doesn't exist + $headers = apache_request_headers(); + + // sanitize the output of apache_request_headers because + // we always want the keys to be Cased-Like-This and arh() + // returns the headers in the same case as they are in the + // request + $out = array(); + foreach ($headers AS $key => $value) { + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("-", " ", $key))) + ); + $out[$key] = $value; + } + } else { + // otherwise we don't have apache and are just going to have to hope + // that $_SERVER actually contains what we need + $out = array(); + if( isset($_SERVER['CONTENT_TYPE']) ) + $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; + if( isset($_ENV['CONTENT_TYPE']) ) + $out['Content-Type'] = $_ENV['CONTENT_TYPE']; + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) == "HTTP_") { + // this is chaos, basically it is just there to capitalize the first + // letter of every word that is not an initial HTTP and strip HTTP + // code from przemek + $key = str_replace( + " ", + "-", + ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) + ); + $out[$key] = $value; + } + } + } + return $out; + } + + // This function takes a input like a=b&a=c&d=e and returns the parsed + // parameters like this + // array('a' => array('b','c'), 'd' => 'e') + public static function parse_parameters( $input ) { + if (!isset($input) || !$input) return array(); + + $pairs = explode('&', $input); + + $parsed_parameters = array(); + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = OAuthUtil::urldecode_rfc3986($split[0]); + $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; + + if (isset($parsed_parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parsed_parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); + } + + $parsed_parameters[$parameter][] = $value; + } else { + $parsed_parameters[$parameter] = $value; + } + } + return $parsed_parameters; + } + + public static function build_http_query($params) { + if (!$params) return ''; + + // Urlencode both keys and values + $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); + $values = OAuthUtil::urlencode_rfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = array(); + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + // June 12th, 2010 - changed to sort because of issue 164 by hidetaka + sort($value, SORT_STRING); + foreach ($value as $duplicate_value) { + $pairs[] = $parameter . '=' . $duplicate_value; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} diff --git a/plugin/social/Hybrid/thirdparty/OAuth/OAuth1Client.php b/plugin/social/Hybrid/thirdparty/OAuth/OAuth1Client.php new file mode 100644 index 000000000..64c03c87d --- /dev/null +++ b/plugin/social/Hybrid/thirdparty/OAuth/OAuth1Client.php @@ -0,0 +1,264 @@ +sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer( $consumer_key, $consumer_secret ); + $this->token = null; + + if ( $oauth_token && $oauth_token_secret ){ + $this->token = new OAuthConsumer( $oauth_token, $oauth_token_secret ); + } + } + + /** + * Build authorize url + * + * @return string + */ + function authorizeUrl( $token, $extras =array() ) + { + if ( is_array( $token ) ){ + $token = $token['oauth_token']; + } + + $parameters = array( "oauth_token" => $token ); + + if( count($extras) ) + foreach( $extras as $k=>$v ) + $parameters[$k] = $v; + + return $this->authorize_url . "?" . http_build_query( $parameters ); + } + + /** + * Get a request_token from provider + * + * @return array a key/value array containing oauth_token and oauth_token_secret + */ + function requestToken( $callback = null ) + { + $parameters = array(); + + if ( $callback ) { + $this->redirect_uri = $parameters['oauth_callback'] = $callback; + } + + $request = $this->signedRequest( $this->request_token_url, $this->request_token_method, $parameters ); + $token = OAuthUtil::parse_parameters( $request ); + $this->token = new OAuthConsumer( $token['oauth_token'], $token['oauth_token_secret'] ); + + return $token; + } + + /** + * Exchange the request token and secret for an access token and secret, to sign API calls. + * + * @return array array('oauth_token' => the access token, 'oauth_token_secret' => the access secret) + */ + function accessToken( $oauth_verifier = false, $oauth_token = false ) + { + $parameters = array(); + + // 1.0a + if ( $oauth_verifier ) { + $parameters['oauth_verifier'] = $oauth_verifier; + } + + $request = $this->signedRequest( $this->access_token_url, $this->access_token_method, $parameters ); + $token = OAuthUtil::parse_parameters( $request ); + $this->token = new OAuthConsumer( $token['oauth_token'], $token['oauth_token_secret'] ); + + return $token; + } + + /** + * GET wrapper for provider apis request + */ + function get($url, $parameters = array(), $content_type = null) + { + return $this->api($url, 'GET', $parameters, null, $content_type); + } + + /** + * POST wrapper for provider apis request + */ + function post($url, $parameters = array(), $body = null, $content_type = null, $multipart = false) + { + return $this->api($url, 'POST', $parameters, $body, $content_type, $multipart ); + } + + /** + * Format and sign an oauth for provider api + */ + function api( $url, $method = 'GET', $parameters = array(), $body = null, $content_type = null, $multipart = false ) + { + if ( strrpos($url, 'http://') !== 0 && strrpos($url, 'https://') !== 0 ) { + $url = $this->api_base_url . $url; + } + + $response = $this->signedRequest( $url, $method, $parameters, $body, $content_type, $multipart ); + + if( $this->decode_json ){ + $response = json_decode( $response ); + } + + return $this->response = $response; + } + + /** + * Return the response object afer the fact + * + * @return mixed + */ + public function getResponse() + { + return $this->response; + } + + /** + * Make signed request + */ + function signedRequest( $url, $method, $parameters, $body = null, $content_type = null, $multipart = false ) + { + + $signature_parameters = array(); + + // when making a multipart request, use only oauth_* keys for signature + foreach( $parameters AS $key => $value ){ + if( !$multipart || strpos( $key, 'oauth_' ) === 0 ){ + $signature_parameters[$key] = $value; + } + } + + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $signature_parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': return $this->request( $request->to_url(), 'GET', null, null, $content_type ); + default : + if ($body) + return $this->request( $request->to_url(), $method, $body, $request->to_header(), $content_type ); + else + return $this->request( $request->get_normalized_http_url(), $method, ($multipart ? $parameters : $request->to_postdata()), $request->to_header(), $content_type, $multipart ) ; + } + } + + /** + * Make http request + */ + function request( $url, $method, $postfields = null, $auth_header = null, $content_type = null, $multipart = false ) + { + Hybrid_Logger::info( "Enter OAuth1Client::request( $method, $url )" ); + Hybrid_Logger::debug( "OAuth1Client::request(). dump post fields: ", serialize( $postfields ) ); + + $this->http_info = array(); + $ci = curl_init(); + + /* Curl settings */ + curl_setopt( $ci, CURLOPT_USERAGENT , $this->curl_useragent ); + curl_setopt( $ci, CURLOPT_CONNECTTIMEOUT, $this->curl_connect_time_out ); + curl_setopt( $ci, CURLOPT_TIMEOUT , $this->curl_time_out ); + curl_setopt( $ci, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $ci, CURLOPT_HTTPHEADER , array('Expect:') ); + curl_setopt( $ci, CURLOPT_SSL_VERIFYPEER, $this->curl_ssl_verifypeer ); + curl_setopt( $ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader') ); + curl_setopt( $ci, CURLOPT_HEADER , false ); + + if( $multipart ){ + curl_setopt( $ci, CURLOPT_HTTPHEADER, array( 'Expect:', $auth_header ) ); + + }elseif ($content_type) + curl_setopt( $ci, CURLOPT_HTTPHEADER, array('Expect:', "Content-Type: $content_type") ); + + if($this->curl_proxy){ + curl_setopt( $ci, CURLOPT_PROXY , $this->curl_proxy); + } + + switch ($method){ + case 'POST': + curl_setopt( $ci, CURLOPT_POST, true ); + + if ( !empty($postfields) ){ + curl_setopt( $ci, CURLOPT_POSTFIELDS, $postfields ); + } + + if ( !empty($auth_header) && $this->curl_auth_header && !$multipart ){ + curl_setopt( $ci, CURLOPT_HTTPHEADER, array( 'Content-Type: application/atom+xml', $auth_header ) ); + } + break; + case 'DELETE': + curl_setopt( $ci, CURLOPT_CUSTOMREQUEST, 'DELETE' ); + if ( !empty($postfields) ){ + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + if( $response === false ) { + Hybrid_Logger::error( "OAuth1Client::request(). curl_exec error: ", curl_error($ci) ); + } + + + Hybrid_Logger::debug( "OAuth1Client::request(). dump request info: ", serialize( curl_getinfo($ci) ) ); + Hybrid_Logger::debug( "OAuth1Client::request(). dump request result: ", serialize( $response ) ); + + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + + curl_close ($ci); + + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + + if ( !empty($i) ){ + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + + return strlen($header); + } +} diff --git a/plugin/social/Hybrid/thirdparty/OAuth/OAuth2Client.php b/plugin/social/Hybrid/thirdparty/OAuth/OAuth2Client.php new file mode 100644 index 000000000..0046d2c58 --- /dev/null +++ b/plugin/social/Hybrid/thirdparty/OAuth/OAuth2Client.php @@ -0,0 +1,302 @@ +client_id = $client_id; + $this->client_secret = $client_secret; + $this->redirect_uri = $redirect_uri; + $this->curl_compressed = $compressed; + } + + public function authorizeUrl( $extras = array() ) + { + $params = array( + "client_id" => $this->client_id, + "redirect_uri" => $this->redirect_uri, + "response_type" => "code" + ); + + if( count($extras) ) + foreach( $extras as $k=>$v ) + $params[$k] = $v; + + return $this->authorize_url . "?" . http_build_query($params, '', '&'); + } + + public function authenticate( $code ) + { + $params = array( + "client_id" => $this->client_id, + "client_secret" => $this->client_secret, + "grant_type" => "authorization_code", + "redirect_uri" => $this->redirect_uri, + "code" => $code + ); + + $response = $this->request( $this->token_url, $params, $this->curl_authenticate_method ); + + $response = $this->parseRequestResult( $response ); + + if( ! $response || ! isset( $response->access_token ) ){ + throw new Exception( "The Authorization Service has return: " . $response->error ); + } + + if( isset( $response->access_token ) ) $this->access_token = $response->access_token; + if( isset( $response->refresh_token ) ) $this->refresh_token = $response->refresh_token; + if( isset( $response->expires_in ) ) $this->access_token_expires_in = $response->expires_in; + + // calculate when the access token expire + if( isset($response->expires_in)) { + $this->access_token_expires_at = time() + $response->expires_in; + } + + return $response; + } + + public function authenticated() + { + if ( $this->access_token ){ + if ( $this->token_info_url && $this->refresh_token ){ + // check if this access token has expired, + $tokeninfo = $this->tokenInfo( $this->access_token ); + + // if yes, access_token has expired, then ask for a new one + if( $tokeninfo && isset( $tokeninfo->error ) ){ + $response = $this->refreshToken( $this->refresh_token ); + + // if wrong response + if( ! isset( $response->access_token ) || ! $response->access_token ){ + throw new Exception( "The Authorization Service has return an invalid response while requesting a new access token. given up!" ); + } + + // set new access_token + $this->access_token = $response->access_token; + } + } + + return true; + } + + return false; + } + + /** + * Format and sign an oauth for provider api + */ + public function api( $url, $method = "GET", $parameters = array(), $decode_json = true ) + { + if ( strrpos($url, 'http://') !== 0 && strrpos($url, 'https://') !== 0 ) { + $url = $this->api_base_url . $url; + } + + $parameters[$this->sign_token_name] = $this->access_token; + $response = null; + + switch( $method ){ + case 'GET' : $response = $this->request( $url, $parameters, "GET" ); break; + case 'POST' : $response = $this->request( $url, $parameters, "POST" ); break; + case 'DELETE' : $response = $this->request( $url, $parameters, "DELETE" ); break; + case 'PATCH' : $response = $this->request( $url, $parameters, "PATCH" ); break; + } + + if( $response && $decode_json ){ + return $this->response = json_decode( $response ); + } + + return $this->response = $response; + } + + /** + * Return the response object afer the fact + * + * @return mixed + */ + public function getResponse() + { + return $this->response; + } + + /** + * GET wrapper for provider apis request + */ + function get( $url, $parameters = array(), $decode_json = true ) + { + return $this->api( $url, 'GET', $parameters, $decode_json ); + } + + /** + * POST wrapper for provider apis request + */ + function post( $url, $parameters = array(), $decode_json = true ) + { + return $this->api( $url, 'POST', $parameters, $decode_json ); + } + + // -- tokens + + public function tokenInfo($accesstoken) + { + $params['access_token'] = $this->access_token; + $response = $this->request( $this->token_info_url, $params ); + return $this->parseRequestResult( $response ); + } + + public function refreshToken( $parameters = array() ) + { + $params = array( + "client_id" => $this->client_id, + "client_secret" => $this->client_secret, + "grant_type" => "refresh_token" + ); + + foreach($parameters as $k=>$v ){ + $params[$k] = $v; + } + + $response = $this->request( $this->token_url, $params, "POST" ); + return $this->parseRequestResult( $response ); + } + + // -- utilities + + private function request( $url, $params=false, $type="GET" ) + { + Hybrid_Logger::info( "Enter OAuth2Client::request( $url )" ); + Hybrid_Logger::debug( "OAuth2Client::request(). dump request params: ", serialize( $params ) ); + + $urlEncodedParams = http_build_query($params, '', '&'); + + if( $type == "GET" ){ + $url = $url . ( strpos( $url, '?' ) ? '&' : '?' ) . $urlEncodedParams; + } + + $this->http_info = array(); + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL , $url ); + curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1 ); + curl_setopt($ch, CURLOPT_TIMEOUT , $this->curl_time_out ); + curl_setopt($ch, CURLOPT_USERAGENT , $this->curl_useragent ); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , $this->curl_connect_time_out ); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , $this->curl_ssl_verifypeer ); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , $this->curl_ssl_verifyhost ); + curl_setopt($ch, CURLOPT_HTTPHEADER , $this->curl_header ); + + if ($this->curl_compressed){ + curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate"); + } + + if($this->curl_proxy){ + curl_setopt( $ch, CURLOPT_PROXY , $this->curl_proxy); + } + + if ($type == "POST") { + curl_setopt($ch, CURLOPT_POST, 1); + + // If request body exists then encode it for "application/json". + if (isset($params['body'])) { + $urlEncodedParams = json_encode($params['body']); + } + + // Using URL encoded params here instead of a more convenient array + // cURL will set a wrong HTTP Content-Type header if using an array (cf. http://www.php.net/manual/en/function.curl-setopt.php, Notes section for "CURLOPT_POSTFIELDS") + // OAuth requires application/x-www-form-urlencoded Content-Type (cf. https://tools.ietf.org/html/rfc6749#section-2.3.1) + if ($params) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $urlEncodedParams); + } + } + + if( $type == "DELETE" ){ + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); + } + if( $type == "PATCH" ){ + curl_setopt($ch, CURLOPT_POST, 1); + if($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH"); + } + $response = curl_exec($ch); + if( $response === false ) { + Hybrid_Logger::error( "OAuth2Client::request(). curl_exec error: ", curl_error($ch) ); + } + Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize( curl_getinfo($ch) ) ); + Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize( $response ) ); + + $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ch)); + + curl_close ($ch); + + return $response; + } + + private function parseRequestResult( $result ) + { + if( json_decode( $result ) ) return json_decode( $result ); + + parse_str( $result, $output ); + + $result = new StdClass(); + + foreach( $output as $k => $v ) + $result->$k = $v; + + return $result; + } + /** + * DELETE wrapper for provider apis request + */ + function delete( $url, $parameters = array() ) + { + return $this->api( $url, 'DELETE', $parameters ); + } + /** + * PATCH wrapper for provider apis request + */ + function patch( $url, $parameters = array() ) + { + return $this->api( $url, 'PATCH', $parameters ); + } +} diff --git a/plugin/social/Hybrid/thirdparty/OpenID/LightOpenID.php b/plugin/social/Hybrid/thirdparty/OpenID/LightOpenID.php new file mode 100644 index 000000000..b1cb41bb3 --- /dev/null +++ b/plugin/social/Hybrid/thirdparty/OpenID/LightOpenID.php @@ -0,0 +1,1051 @@ += 5.1.2 with cURL or HTTP/HTTPS stream wrappers enabled. + * + * @version v1.2.0 (2014-01-14) + * @link https://code.google.com/p/lightopenid/ Project URL + * @link https://github.com/iignatov/LightOpenID GitHub Repo + * @author Mewp + * @copyright Copyright (c) 2013 Mewp + * @license http://opensource.org/licenses/mit-license.php MIT License + */ +class LightOpenID +{ + public $returnUrl + , $required = array() + , $optional = array() + , $verify_peer = null + , $capath = null + , $cainfo = null + , $cnmatch = null + , $data + , $oauth = array() + , $curl_time_out = 30 + , $curl_connect_time_out = 30; + private $identity, $claimed_id; + protected $server, $version, $trustRoot, $aliases, $identifier_select = false + , $ax = false, $sreg = false, $setup_url = null, $headers = array() + , $proxy = null, $user_agent = 'LightOpenID' + , $xrds_override_pattern = null, $xrds_override_replacement = null; + static protected $ax_to_sreg = array( + 'namePerson/friendly' => 'nickname', + 'contact/email' => 'email', + 'namePerson' => 'fullname', + 'birthDate' => 'dob', + 'person/gender' => 'gender', + 'contact/postalCode/home' => 'postcode', + 'contact/country/home' => 'country', + 'pref/language' => 'language', + 'pref/timezone' => 'timezone', + ); + + function __construct($host, $proxy = null) + { + $this->set_realm($host); + $this->set_proxy($proxy); + + $uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?'); + $this->returnUrl = $this->trustRoot . $uri; + + $this->data = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET; + + if(!function_exists('curl_init') && !in_array('https', stream_get_wrappers())) { + throw new ErrorException('You must have either https wrappers or curl enabled.'); + } + } + + function __isset($name) + { + return in_array($name, array('identity', 'trustRoot', 'realm', 'xrdsOverride', 'mode')); + } + + function __set($name, $value) + { + switch ($name) { + case 'identity': + if (strlen($value = trim((String) $value))) { + if (preg_match('#^xri:/*#i', $value, $m)) { + $value = substr($value, strlen($m[0])); + } elseif (!preg_match('/^(?:[=@+\$!\(]|https?:)/i', $value)) { + $value = "http://$value"; + } + if (preg_match('#^https?://[^/]+$#i', $value, $m)) { + $value .= '/'; + } + } + $this->$name = $this->claimed_id = $value; + break; + case 'trustRoot': + case 'realm': + $this->trustRoot = trim($value); + break; + case 'xrdsOverride': + if (is_array($value)) { + list($pattern, $replacement) = $value; + $this->xrds_override_pattern = $pattern; + $this->xrds_override_replacement = $replacement; + } else { + trigger_error('Invalid value specified for "xrdsOverride".', E_USER_ERROR); + } + break; + } + } + + function __get($name) + { + switch ($name) { + case 'identity': + # We return claimed_id instead of identity, + # because the developer should see the claimed identifier, + # i.e. what he set as identity, not the op-local identifier (which is what we verify) + return $this->claimed_id; + case 'trustRoot': + case 'realm': + return $this->trustRoot; + case 'mode': + return empty($this->data['openid_mode']) ? null : $this->data['openid_mode']; + } + } + + function set_proxy($proxy) + { + if (!empty($proxy)) { + // When the proxy is a string - try to parse it. + if (!is_array($proxy)) { + $proxy = parse_url($proxy); + } + + // Check if $proxy is valid after the parsing. + if ($proxy && !empty($proxy['host'])) { + // Make sure that a valid port number is specified. + if (array_key_exists('port', $proxy)) { + if (!is_int($proxy['port'])) { + $proxy['port'] = is_numeric($proxy['port']) ? intval($proxy['port']) : 0; + } + + if ($proxy['port'] <= 0) { + throw new ErrorException('The specified proxy port number is invalid.'); + } + } + + $this->proxy = $proxy; + } + } + } + + /** + * Checks if the server specified in the url exists. + * + * @param $url url to check + * @return true, if the server exists; false otherwise + */ + function hostExists($url) + { + if (strpos($url, '/') === false) { + $server = $url; + } else { + $server = @parse_url($url, PHP_URL_HOST); + } + + if (!$server) { + return false; + } + + return !!gethostbynamel($server); + } + + protected function set_realm($uri) + { + $realm = ''; + + # Set a protocol, if not specified. + $realm .= (($offset = strpos($uri, '://')) === false) ? $this->get_realm_protocol() : ''; + + # Set the offset properly. + $offset = (($offset !== false) ? $offset + 3 : 0); + + # Get only the root, without the path. + $realm .= (($end = strpos($uri, '/', $offset)) === false) ? $uri : substr($uri, 0, $end); + + $this->trustRoot = $realm; + } + + protected function get_realm_protocol() + { + if (!empty($_SERVER['HTTPS'])) { + $use_secure_protocol = ($_SERVER['HTTPS'] != 'off'); + } else if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { + $use_secure_protocol = ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'); + } else { + $use_secure_protocol = false; + } + + return $use_secure_protocol ? 'https://' : 'http://'; + } + + protected function request_curl($url, $method='GET', $params=array(), $update_claimed_id) + { + $params = http_build_query($params, '', '&'); + $curl = curl_init($url . ($method == 'GET' && $params ? '?' . $params : '')); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_HEADER, false); + curl_setopt($curl, CURLOPT_USERAGENT, $this->user_agent); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_TIMEOUT, $this->curl_time_out); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT , $this->curl_connect_time_out); + + + if ($method == 'POST') { + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded')); + } else { + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/xrds+xml, */*')); + } + + if (!empty($this->proxy)) { + curl_setopt($curl, CURLOPT_PROXY, $this->proxy['host']); + + if (!empty($this->proxy['port'])) { + curl_setopt($curl, CURLOPT_PROXYPORT, $this->proxy['port']); + } + + if (!empty($this->proxy['user'])) { + curl_setopt($curl, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']); + } + } + + if($this->verify_peer !== null) { + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verify_peer); + if($this->capath) { + curl_setopt($curl, CURLOPT_CAPATH, $this->capath); + } + + if($this->cainfo) { + curl_setopt($curl, CURLOPT_CAINFO, $this->cainfo); + } + } + + if ($method == 'POST') { + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $params); + } elseif ($method == 'HEAD') { + curl_setopt($curl, CURLOPT_HEADER, true); + curl_setopt($curl, CURLOPT_NOBODY, true); + } else { + curl_setopt($curl, CURLOPT_HEADER, true); + curl_setopt($curl, CURLOPT_HTTPGET, true); + } + $response = curl_exec($curl); + + if($method == 'HEAD' && curl_getinfo($curl, CURLINFO_HTTP_CODE) == 405) { + curl_setopt($curl, CURLOPT_HTTPGET, true); + $response = curl_exec($curl); + $response = substr($response, 0, strpos($response, "\r\n\r\n")); + } + + if($method == 'HEAD' || $method == 'GET') { + $header_response = $response; + + # If it's a GET request, we want to only parse the header part. + if($method == 'GET') { + $header_response = substr($response, 0, strpos($response, "\r\n\r\n")); + } + + $headers = array(); + foreach(explode("\n", $header_response) as $header) { + $pos = strpos($header,':'); + if ($pos !== false) { + $name = strtolower(trim(substr($header, 0, $pos))); + $headers[$name] = trim(substr($header, $pos+1)); + } + } + + if($update_claimed_id) { + # Update the claimed_id value in case of redirections. + $effective_url = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); + # Ignore the fragment (some cURL versions don't handle it well). + if (strtok($effective_url, '#') != strtok($url, '#')) { + $this->identity = $this->claimed_id = $effective_url; + } + } + + if($method == 'HEAD') { + return $headers; + } else { + $this->headers = $headers; + } + } + + if (curl_errno($curl)) { + throw new ErrorException(curl_error($curl), curl_errno($curl)); + } + + return $response; + } + + protected function parse_header_array($array, $update_claimed_id) + { + $headers = array(); + foreach($array as $header) { + $pos = strpos($header,':'); + if ($pos !== false) { + $name = strtolower(trim(substr($header, 0, $pos))); + $headers[$name] = trim(substr($header, $pos+1)); + + # Following possible redirections. The point is just to have + # claimed_id change with them, because the redirections + # are followed automatically. + # We ignore redirections with relative paths. + # If any known provider uses them, file a bug report. + if($name == 'location' && $update_claimed_id) { + if(strpos($headers[$name], 'http') === 0) { + $this->identity = $this->claimed_id = $headers[$name]; + } elseif($headers[$name][0] == '/') { + $parsed_url = parse_url($this->claimed_id); + $this->identity = + $this->claimed_id = $parsed_url['scheme'] . '://' + . $parsed_url['host'] + . $headers[$name]; + } + } + } + } + return $headers; + } + + protected function request_streams($url, $method='GET', $params=array(), $update_claimed_id) + { + if(!$this->hostExists($url)) { + throw new ErrorException("Could not connect to $url.", 404); + } + + if (empty($this->cnmatch)) { + $this->cnmatch = parse_url($url, PHP_URL_HOST); + } + + $params = http_build_query($params, '', '&'); + switch($method) { + case 'GET': + $opts = array( + 'http' => array( + 'method' => 'GET', + 'header' => 'Accept: application/xrds+xml, */*', + 'user_agent' => $this->user_agent, + 'ignore_errors' => true, + ), + 'ssl' => array( + 'CN_match' => $this->cnmatch + ) + ); + $url = $url . ($params ? '?' . $params : ''); + if (!empty($this->proxy)) { + $opts['http']['proxy'] = $this->proxy_url(); + } + break; + case 'POST': + $opts = array( + 'http' => array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'user_agent' => $this->user_agent, + 'content' => $params, + 'ignore_errors' => true, + ), + 'ssl' => array( + 'CN_match' => $this->cnmatch + ) + ); + if (!empty($this->proxy)) { + $opts['http']['proxy'] = $this->proxy_url(); + } + break; + case 'HEAD': + // We want to send a HEAD request, but since get_headers() doesn't + // accept $context parameter, we have to change the defaults. + $default = stream_context_get_options(stream_context_get_default()); + + // PHP does not reset all options. Instead, it just sets the options + // available in the passed array, therefore set the defaults manually. + $default += array( + 'http' => array(), + 'ssl' => array() + ); + $default['http'] += array( + 'method' => 'GET', + 'header' => '', + 'user_agent' => '', + 'ignore_errors' => false + ); + $default['ssl'] += array( + 'CN_match' => '' + ); + + $opts = array( + 'http' => array( + 'method' => 'HEAD', + 'header' => 'Accept: application/xrds+xml, */*', + 'user_agent' => $this->user_agent, + 'ignore_errors' => true, + ), + 'ssl' => array( + 'CN_match' => $this->cnmatch + ) + ); + + // Enable validation of the SSL certificates. + if ($this->verify_peer) { + $default['ssl'] += array( + 'verify_peer' => false, + 'capath' => '', + 'cafile' => '' + ); + $opts['ssl'] += array( + 'verify_peer' => true, + 'capath' => $this->capath, + 'cafile' => $this->cainfo + ); + } + + // Change the stream context options. + stream_context_get_default($opts); + + $headers = get_headers($url . ($params ? '?' . $params : '')); + + // Restore the stream context options. + stream_context_get_default($default); + + if (!empty($headers)) { + if (intval(substr($headers[0], strlen('HTTP/1.1 '))) == 405) { + // The server doesn't support HEAD - emulate it with a GET. + $args = func_get_args(); + $args[1] = 'GET'; + call_user_func_array(array($this, 'request_streams'), $args); + $headers = $this->headers; + } else { + $headers = $this->parse_header_array($headers, $update_claimed_id); + } + } else { + $headers = array(); + } + + return $headers; + } + + if ($this->verify_peer) { + $opts['ssl'] += array( + 'verify_peer' => true, + 'capath' => $this->capath, + 'cafile' => $this->cainfo + ); + } + + $context = stream_context_create ($opts); + $data = file_get_contents($url, false, $context); + # This is a hack for providers who don't support HEAD requests. + # It just creates the headers array for the last request in $this->headers. + if(isset($http_response_header)) { + $this->headers = $this->parse_header_array($http_response_header, $update_claimed_id); + } + + return $data; + } + + protected function request($url, $method='GET', $params=array(), $update_claimed_id=false) + { + $use_curl = false; + + if (function_exists('curl_init')) { + if (!$use_curl) { + # When allow_url_fopen is disabled, PHP streams will not work. + $use_curl = !ini_get('allow_url_fopen'); + } + + if (!$use_curl) { + # When there is no HTTPS wrapper, PHP streams cannott be used. + $use_curl = !in_array('https', stream_get_wrappers()); + } + + if (!$use_curl) { + # With open_basedir or safe_mode set, cURL can't follow redirects. + $use_curl = !(ini_get('safe_mode') || ini_get('open_basedir')); + } + } + + return + $use_curl + ? $this->request_curl($url, $method, $params, $update_claimed_id) + : $this->request_streams($url, $method, $params, $update_claimed_id); + } + + protected function proxy_url() + { + $result = ''; + + if (!empty($this->proxy)) { + $result = $this->proxy['host']; + + if (!empty($this->proxy['port'])) { + $result = $result . ':' . $this->proxy['port']; + } + + if (!empty($this->proxy['user'])) { + $result = $this->proxy['user'] . ':' . $this->proxy['pass'] . '@' . $result; + } + + $result = 'http://' . $result; + } + + return $result; + } + + protected function build_url($url, $parts) + { + if (isset($url['query'], $parts['query'])) { + $parts['query'] = $url['query'] . '&' . $parts['query']; + } + + $url = $parts + $url; + $url = $url['scheme'] . '://' + . (empty($url['username'])?'' + :(empty($url['password'])? "{$url['username']}@" + :"{$url['username']}:{$url['password']}@")) + . $url['host'] + . (empty($url['port'])?'':":{$url['port']}") + . (empty($url['path'])?'':$url['path']) + . (empty($url['query'])?'':"?{$url['query']}") + . (empty($url['fragment'])?'':"#{$url['fragment']}"); + return $url; + } + + /** + * Helper function used to scan for / tags and extract information + * from them + */ + protected function htmlTag($content, $tag, $attrName, $attrValue, $valueName) + { + preg_match_all("#<{$tag}[^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*$valueName=['\"](.+?)['\"][^>]*/?>#i", $content, $matches1); + preg_match_all("#<{$tag}[^>]*$valueName=['\"](.+?)['\"][^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*/?>#i", $content, $matches2); + + $result = array_merge($matches1[1], $matches2[1]); + return empty($result)?false:$result[0]; + } + + /** + * Performs Yadis and HTML discovery. Normally not used. + * @param $url Identity URL. + * @return String OP Endpoint (i.e. OpenID provider address). + * @throws ErrorException + */ + function discover($url) + { + if (!$url) throw new ErrorException('No identity supplied.'); + # Use xri.net proxy to resolve i-name identities + if (!preg_match('#^https?:#', $url)) { + $url = "https://xri.net/$url"; + } + + # We save the original url in case of Yadis discovery failure. + # It can happen when we'll be lead to an XRDS document + # which does not have any OpenID2 services. + $originalUrl = $url; + + # A flag to disable yadis discovery in case of failure in headers. + $yadis = true; + + # Allows optional regex replacement of the URL, e.g. to use Google Apps + # as an OpenID provider without setting up XRDS on the domain hosting. + if (!is_null($this->xrds_override_pattern) && !is_null($this->xrds_override_replacement)) { + $url = preg_replace($this->xrds_override_pattern, $this->xrds_override_replacement, $url); + } + + # We'll jump a maximum of 5 times, to avoid endless redirections. + for ($i = 0; $i < 5; $i ++) { + if ($yadis) { + $headers = $this->request($url, 'HEAD', array(), true); + + $next = false; + if (isset($headers['x-xrds-location'])) { + $url = $this->build_url(parse_url($url), parse_url(trim($headers['x-xrds-location']))); + $next = true; + } + + if (isset($headers['content-type']) && $this->is_allowed_type($headers['content-type'])) { + # Found an XRDS document, now let's find the server, and optionally delegate. + $content = $this->request($url, 'GET'); + + preg_match_all('#(.*?)#s', $content, $m); + foreach($m[1] as $content) { + $content = ' ' . $content; # The space is added, so that strpos doesn't return 0. + + # OpenID 2 + $ns = preg_quote('http://specs.openid.net/auth/2.0/', '#'); + if(preg_match('#\s*'.$ns.'(server|signon)\s*#s', $content, $type)) { + if ($type[1] == 'server') $this->identifier_select = true; + + preg_match('#(.*)#', $content, $server); + preg_match('#<(Local|Canonical)ID>(.*)#', $content, $delegate); + if (empty($server)) { + return false; + } + # Does the server advertise support for either AX or SREG? + $this->ax = (bool) strpos($content, 'http://openid.net/srv/ax/1.0'); + $this->sreg = strpos($content, 'http://openid.net/sreg/1.0') + || strpos($content, 'http://openid.net/extensions/sreg/1.1'); + + $server = $server[1]; + if (isset($delegate[2])) $this->identity = trim($delegate[2]); + $this->version = 2; + + $this->server = $server; + return $server; + } + + # OpenID 1.1 + $ns = preg_quote('http://openid.net/signon/1.1', '#'); + if (preg_match('#\s*'.$ns.'\s*#s', $content)) { + + preg_match('#(.*)#', $content, $server); + preg_match('#<.*?Delegate>(.*)#', $content, $delegate); + if (empty($server)) { + return false; + } + # AX can be used only with OpenID 2.0, so checking only SREG + $this->sreg = strpos($content, 'http://openid.net/sreg/1.0') + || strpos($content, 'http://openid.net/extensions/sreg/1.1'); + + $server = $server[1]; + if (isset($delegate[1])) $this->identity = $delegate[1]; + $this->version = 1; + + $this->server = $server; + return $server; + } + } + + $next = true; + $yadis = false; + $url = $originalUrl; + $content = null; + break; + } + if ($next) continue; + + # There are no relevant information in headers, so we search the body. + $content = $this->request($url, 'GET', array(), true); + + if (isset($this->headers['x-xrds-location'])) { + $url = $this->build_url(parse_url($url), parse_url(trim($this->headers['x-xrds-location']))); + continue; + } + + $location = $this->htmlTag($content, 'meta', 'http-equiv', 'X-XRDS-Location', 'content'); + if ($location) { + $url = $this->build_url(parse_url($url), parse_url($location)); + continue; + } + } + + if (!$content) $content = $this->request($url, 'GET'); + + # At this point, the YADIS Discovery has failed, so we'll switch + # to openid2 HTML discovery, then fallback to openid 1.1 discovery. + $server = $this->htmlTag($content, 'link', 'rel', 'openid2.provider', 'href'); + $delegate = $this->htmlTag($content, 'link', 'rel', 'openid2.local_id', 'href'); + $this->version = 2; + + if (!$server) { + # The same with openid 1.1 + $server = $this->htmlTag($content, 'link', 'rel', 'openid.server', 'href'); + $delegate = $this->htmlTag($content, 'link', 'rel', 'openid.delegate', 'href'); + $this->version = 1; + } + + if ($server) { + # We found an OpenID2 OP Endpoint + if ($delegate) { + # We have also found an OP-Local ID. + $this->identity = $delegate; + } + $this->server = $server; + return $server; + } + + throw new ErrorException("No OpenID Server found at $url", 404); + } + throw new ErrorException('Endless redirection!', 500); + } + + protected function is_allowed_type($content_type) { + # Apparently, some providers return XRDS documents as text/html. + # While it is against the spec, allowing this here shouldn't break + # compatibility with anything. + $allowed_types = array('application/xrds+xml', 'text/html', 'text/xml'); + + foreach ($allowed_types as $type) { + if (strpos($content_type, $type) !== false) { + return true; + } + } + + return false; + } + + protected function sregParams() + { + $params = array(); + # We always use SREG 1.1, even if the server is advertising only support for 1.0. + # That's because it's fully backwards compatibile with 1.0, and some providers + # advertise 1.0 even if they accept only 1.1. One such provider is myopenid.com + $params['openid.ns.sreg'] = 'http://openid.net/extensions/sreg/1.1'; + if ($this->required) { + $params['openid.sreg.required'] = array(); + foreach ($this->required as $required) { + if (!isset(self::$ax_to_sreg[$required])) continue; + $params['openid.sreg.required'][] = self::$ax_to_sreg[$required]; + } + $params['openid.sreg.required'] = implode(',', $params['openid.sreg.required']); + } + + if ($this->optional) { + $params['openid.sreg.optional'] = array(); + foreach ($this->optional as $optional) { + if (!isset(self::$ax_to_sreg[$optional])) continue; + $params['openid.sreg.optional'][] = self::$ax_to_sreg[$optional]; + } + $params['openid.sreg.optional'] = implode(',', $params['openid.sreg.optional']); + } + return $params; + } + + protected function axParams() + { + $params = array(); + if ($this->required || $this->optional) { + $params['openid.ns.ax'] = 'http://openid.net/srv/ax/1.0'; + $params['openid.ax.mode'] = 'fetch_request'; + $this->aliases = array(); + $counts = array(); + $required = array(); + $optional = array(); + foreach (array('required','optional') as $type) { + foreach ($this->$type as $alias => $field) { + if (is_int($alias)) $alias = strtr($field, '/', '_'); + $this->aliases[$alias] = 'http://axschema.org/' . $field; + if (empty($counts[$alias])) $counts[$alias] = 0; + $counts[$alias] += 1; + ${$type}[] = $alias; + } + } + foreach ($this->aliases as $alias => $ns) { + $params['openid.ax.type.' . $alias] = $ns; + } + foreach ($counts as $alias => $count) { + if ($count == 1) continue; + $params['openid.ax.count.' . $alias] = $count; + } + + # Don't send empty ax.requied and ax.if_available. + # Google and possibly other providers refuse to support ax when one of these is empty. + if($required) { + $params['openid.ax.required'] = implode(',', $required); + } + if($optional) { + $params['openid.ax.if_available'] = implode(',', $optional); + } + } + return $params; + } + + protected function authUrl_v1($immediate) + { + $returnUrl = $this->returnUrl; + # If we have an openid.delegate that is different from our claimed id, + # we need to somehow preserve the claimed id between requests. + # The simplest way is to just send it along with the return_to url. + if($this->identity != $this->claimed_id) { + $returnUrl .= (strpos($returnUrl, '?') ? '&' : '?') . 'openid.claimed_id=' . $this->claimed_id; + } + + $params = array( + 'openid.return_to' => $returnUrl, + 'openid.mode' => $immediate ? 'checkid_immediate' : 'checkid_setup', + 'openid.identity' => $this->identity, + 'openid.trust_root' => $this->trustRoot, + ) + $this->sregParams(); + + return $this->build_url(parse_url($this->server) + , array('query' => http_build_query($params, '', '&'))); + } + + protected function authUrl_v2($immediate) + { + $params = array( + 'openid.ns' => 'http://specs.openid.net/auth/2.0', + 'openid.mode' => $immediate ? 'checkid_immediate' : 'checkid_setup', + 'openid.return_to' => $this->returnUrl, + 'openid.realm' => $this->trustRoot, + ); + + if ($this->ax) { + $params += $this->axParams(); + } + + if ($this->sreg) { + $params += $this->sregParams(); + } + + if (!$this->ax && !$this->sreg) { + # If OP doesn't advertise either SREG, nor AX, let's send them both + # in worst case we don't get anything in return. + $params += $this->axParams() + $this->sregParams(); + } + + if (!empty($this->oauth) && is_array($this->oauth)) { + $params['openid.ns.oauth'] = 'http://specs.openid.net/extensions/oauth/1.0'; + $params['openid.oauth.consumer'] = str_replace(array('http://', 'https://'), '', $this->trustRoot); + $params['openid.oauth.scope'] = implode(' ', $this->oauth); + } + + if ($this->identifier_select) { + $params['openid.identity'] = $params['openid.claimed_id'] + = 'http://specs.openid.net/auth/2.0/identifier_select'; + } else { + $params['openid.identity'] = $this->identity; + $params['openid.claimed_id'] = $this->claimed_id; + } + + return $this->build_url(parse_url($this->server) + , array('query' => http_build_query($params, '', '&'))); + } + + /** + * Returns authentication url. Usually, you want to redirect your user to it. + * @return String The authentication url. + * @param String $select_identifier Whether to request OP to select identity for an user in OpenID 2. Does not affect OpenID 1. + * @throws ErrorException + */ + function authUrl($immediate = false) + { + if ($this->setup_url && !$immediate) return $this->setup_url; + if (!$this->server) $this->discover($this->identity); + + if ($this->version == 2) { + return $this->authUrl_v2($immediate); + } + return $this->authUrl_v1($immediate); + } + + /** + * Performs OpenID verification with the OP. + * @return Bool Whether the verification was successful. + * @throws ErrorException + */ + function validate() + { + # If the request was using immediate mode, a failure may be reported + # by presenting user_setup_url (for 1.1) or reporting + # mode 'setup_needed' (for 2.0). Also catching all modes other than + # id_res, in order to avoid throwing errors. + if(isset($this->data['openid_user_setup_url'])) { + $this->setup_url = $this->data['openid_user_setup_url']; + return false; + } + if($this->mode != 'id_res') { + return false; + } + + $this->claimed_id = isset($this->data['openid_claimed_id'])?$this->data['openid_claimed_id']:$this->data['openid_identity']; + $params = array( + 'openid.assoc_handle' => $this->data['openid_assoc_handle'], + 'openid.signed' => $this->data['openid_signed'], + 'openid.sig' => $this->data['openid_sig'], + ); + + if (isset($this->data['openid_ns'])) { + # We're dealing with an OpenID 2.0 server, so let's set an ns + # Even though we should know location of the endpoint, + # we still need to verify it by discovery, so $server is not set here + $params['openid.ns'] = 'http://specs.openid.net/auth/2.0'; + } elseif (isset($this->data['openid_claimed_id']) + && $this->data['openid_claimed_id'] != $this->data['openid_identity'] + ) { + # If it's an OpenID 1 provider, and we've got claimed_id, + # we have to append it to the returnUrl, like authUrl_v1 does. + $this->returnUrl .= (strpos($this->returnUrl, '?') ? '&' : '?') + . 'openid.claimed_id=' . $this->claimed_id; + } + + if ($this->data['openid_return_to'] != $this->returnUrl) { + # The return_to url must match the url of current request. + # I'm assuing that noone will set the returnUrl to something that doesn't make sense. + return false; + } + + $server = $this->discover($this->claimed_id); + + foreach (explode(',', $this->data['openid_signed']) as $item) { + # Checking whether magic_quotes_gpc is turned on, because + # the function may fail if it is. For example, when fetching + # AX namePerson, it might containg an apostrophe, which will be escaped. + # In such case, validation would fail, since we'd send different data than OP + # wants to verify. stripslashes() should solve that problem, but we can't + # use it when magic_quotes is off. + $value = $this->data['openid_' . str_replace('.','_',$item)]; + $params['openid.' . $item] = function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() ? stripslashes($value) : $value; + + } + + $params['openid.mode'] = 'check_authentication'; + + $response = $this->request($server, 'POST', $params); + + return preg_match('/is_valid\s*:\s*true/i', $response); + } + + protected function getAxAttributes() + { + $result = array(); + + if ($alias = $this->getNamespaceAlias('http://openid.net/srv/ax/1.0', 'ax')) { + $prefix = 'openid_' . $alias; + $length = strlen('http://axschema.org/'); + + foreach (explode(',', $this->data['openid_signed']) as $key) { + $keyMatch = $alias . '.type.'; + + if (strncmp($key, $keyMatch, strlen($keyMatch)) !== 0) { + continue; + } + + $key = substr($key, strlen($keyMatch)); + $idv = $prefix . '_value_' . $key; + $idc = $prefix . '_count_' . $key; + $key = substr($this->getItem($prefix . '_type_' . $key), $length); + + if (!empty($key)) { + if (($count = intval($this->getItem($idc))) > 0) { + $value = array(); + + for ($i = 1; $i <= $count; $i++) { + $value[] = $this->getItem($idv . '_' . $i); + } + + $value = ($count == 1) ? reset($value) : $value; + } else { + $value = $this->getItem($idv); + } + + if (!is_null($value)) { + $result[$key] = $value; + } + } + } + } else { + // No alias for the AX schema has been found, + // so there is no AX data in the OP's response. + } + + return $result; + } + + protected function getSregAttributes() + { + $attributes = array(); + $sreg_to_ax = array_flip(self::$ax_to_sreg); + foreach (explode(',', $this->data['openid_signed']) as $key) { + $keyMatch = 'sreg.'; + if (strncmp($key, $keyMatch, strlen($keyMatch)) !== 0) { + continue; + } + $key = substr($key, strlen($keyMatch)); + if (!isset($sreg_to_ax[$key])) { + # The field name isn't part of the SREG spec, so we ignore it. + continue; + } + $attributes[$sreg_to_ax[$key]] = $this->data['openid_sreg_' . $key]; + } + return $attributes; + } + + /** + * Gets AX/SREG attributes provided by OP. should be used only after successful validaton. + * Note that it does not guarantee that any of the required/optional parameters will be present, + * or that there will be no other attributes besides those specified. + * In other words. OP may provide whatever information it wants to. + * * SREG names will be mapped to AX names. + * * @return Array Array of attributes with keys being the AX schema names, e.g. 'contact/email' + * @see http://www.axschema.org/types/ + */ + function getAttributes() + { + if (isset($this->data['openid_ns']) + && $this->data['openid_ns'] == 'http://specs.openid.net/auth/2.0' + ) { # OpenID 2.0 + # We search for both AX and SREG attributes, with AX taking precedence. + return $this->getAxAttributes() + $this->getSregAttributes(); + } + return $this->getSregAttributes(); + } + + /** + * Gets an OAuth request token if the OpenID+OAuth hybrid protocol has been used. + * + * In order to use the OpenID+OAuth hybrid protocol, you need to add at least one + * scope to the $openid->oauth array before you get the call to getAuthUrl(), e.g.: + * $openid->oauth[] = 'https://www.googleapis.com/auth/plus.me'; + * + * Furthermore the registered consumer name must fit the OpenID realm. + * To register an OpenID consumer at Google use: https://www.google.com/accounts/ManageDomains + * + * @return string|bool OAuth request token on success, FALSE if no token was provided. + */ + function getOAuthRequestToken() + { + $alias = $this->getNamespaceAlias('http://specs.openid.net/extensions/oauth/1.0'); + + return !empty($alias) ? $this->data['openid_' . $alias . '_request_token'] : false; + } + + /** + * Gets the alias for the specified namespace, if it's present. + * + * @param string $namespace The namespace for which an alias is needed. + * @param string $hint Common alias of this namespace, used for optimization. + * @return string|null The namespace alias if found, otherwise - NULL. + */ + private function getNamespaceAlias($namespace, $hint = null) + { + $result = null; + + if (empty($hint) || $this->getItem('openid_ns_' . $hint) != $namespace) { + // The common alias is either undefined or points to + // some other extension - search for another alias.. + $prefix = 'openid_ns_'; + $length = strlen($prefix); + + foreach ($this->data as $key => $val) { + if (strncmp($key, $prefix, $length) === 0 && $val === $namespace) { + $result = trim(substr($key, $length)); + break; + } + } + } else { + $result = $hint; + } + + return $result; + } + + /** + * Gets an item from the $data array by the specified id. + * + * @param string $id The id of the desired item. + * @return string|null The item if found, otherwise - NULL. + */ + private function getItem($id) + { + return isset($this->data[$id]) ? $this->data[$id] : null; + } +} diff --git a/plugin/social/Hybrid/thirdparty/index.html b/plugin/social/Hybrid/thirdparty/index.html new file mode 100644 index 000000000..c942a79ce --- /dev/null +++ b/plugin/social/Hybrid/thirdparty/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/plugin/social/_common.php b/plugin/social/_common.php new file mode 100644 index 000000000..bad54a5d7 --- /dev/null +++ b/plugin/social/_common.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/plugin/social/config.php b/plugin/social/config.php new file mode 100644 index 000000000..c6816b840 --- /dev/null +++ b/plugin/social/config.php @@ -0,0 +1,63 @@ + "http://localhost/hybridauth-git/hybridauth/", + "providers" => array( + // openid providers + "OpenID" => array( + "enabled" => true, + ), + "Yahoo" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + ), + "AOL" => array( + "enabled" => true, + ), + "Google" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + ), + "Facebook" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + "trustForwarded" => false, + ), + "Twitter" => array( + "enabled" => true, + "keys" => array("key" => "", "secret" => ""), + "includeEmail" => false, + ), + // windows live + "Live" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + ), + "LinkedIn" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + "fields" => array(), + ), + "Foursquare" => array( + "enabled" => true, + "keys" => array("id" => "", "secret" => ""), + ), + ), + // If you want to enable logging, set 'debug_mode' to true. + // You can also set it to + // - "error" To log only error messages. Useful in production + // - "info" To log info and error messages (ignore debug messages) + "debug_mode" => false, + // Path to file writable by the web server. Required if 'debug_mode' is not false + "debug_file" => "", +); diff --git a/plugin/social/error.php b/plugin/social/error.php new file mode 100644 index 000000000..13aa20acf --- /dev/null +++ b/plugin/social/error.php @@ -0,0 +1,68 @@ + + + + + + + 소셜 로그인 - <?php echo $provider; ?> + + + + + +
      +

      Error :

      + +
      + 10) ){ ?> +

      잠시후에 다시 시도해 주세요.

      + + 홈으로 + +
      +
      + + + + \ No newline at end of file diff --git a/plugin/social/img/loading_icon.gif b/plugin/social/img/loading_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..3fcf2bd780e6ee864860bda4f7003d242fdf2c98 GIT binary patch literal 9197 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 literal 0 HcmV?d00001 diff --git a/plugin/social/includes/functions.php b/plugin/social/includes/functions.php new file mode 100644 index 000000000..ed06441ec --- /dev/null +++ b/plugin/social/includes/functions.php @@ -0,0 +1,1039 @@ +getSessionData(); + + if( defined('G5_SOCIAL_LOGIN_START_PARAM') && G5_SOCIAL_LOGIN_START_PARAM === 'hauth.start' && G5_SOCIAL_LOGIN_DONE_PARAM === 'hauth.done' ){ + return $g5['hybrid_auth']->authenticate($provider); + } + + $base_url = G5_SOCIAL_LOGIN_BASE_URL; + $hauth_time = time(); + + $connect_data = array( + 'login_start' => $base_url . ( strpos($base_url, '?') ? '&' : '?' ) . G5_SOCIAL_LOGIN_START_PARAM.'='.$provider.'&hauth.time='.$hauth_time, + 'login_done' => $base_url . ( strpos($base_url, '?') ? '&' : '?' ) . G5_SOCIAL_LOGIN_DONE_PARAM.'='.$provider, + ); + + return $g5['hybrid_auth']->authenticate($provider, $connect_data); +} + +function social_before_join_check($url=''){ + global $g5, $config; + + if( $provider_name = social_get_request_provider() ){ + //재가입 방지 + if( $user_profile = social_session_exists_check() ){ + + $sql = sprintf("select * from {$g5['social_profile_table']} where provider = '%s' and identifier = '%s' ", $provider_name, $user_profile->identifier); + + $is_exist = false; + + $row = sql_fetch($sql); + + if( $row['provider'] ){ + $is_exist = true; + + $time = time() - (86400 * (int) G5_SOCIAL_DELETE_DAY); + + if( empty($row['mb_id']) && ( 0 == G5_SOCIAL_DELETE_DAY || strtotime($row['mp_latest_day']) < $time) ){ + + $sql = "delete from {$g5['social_profile_table']} where mp_no =".$row['mp_no']; + + sql_query($sql); + + $is_exist = false; + } + } + + if( $is_exist ){ + $msg = sprintf("해당 %s ID 로 연결 또는 가입된 내역이 있기 때문에 다시 가입할수 없습니다. 회원이시면 로그인 후 정보 수정에서 계정 연결을 해 주세요.", social_get_provider_service_name($provider_name) ); + + $url = $url ? $url : G5_URL; + alert($msg, $url); + return false; + } + } + + return true; + } + + return false; +} + +function social_get_data($by='provider', $provider, $user_profile){ + global $g5; + + // 소셜 가입이 되어 있는지 체크 + if( $by == 'provider' ){ + + $sql = sprintf("select * from {$g5['social_profile_table']} where provider = '%s' and identifier = '%s' order by mb_id desc ", $provider, $user_profile->identifier); + + $row = sql_fetch($sql); + + if( !empty($row['mb_id']) ){ + return $row; //mb_id 가 있는 경우에만 데이터를 리턴합니다. + } + + return false; + + } else if ( $by == 'member' ){ // 아이디 또는 이메일이나 별명으로 이미 가입되어 있는지 체크 + + $email = ($user_profile->emailVerified) ? $user_profile->emailVerified : $user_profile->email; + $sid = preg_match("/[^0-9a-z_]+/i", "", $user_profile->sid); + $nick = social_relace_nick($user_profile->displayName); + if( !$nick ){ + $tmp = explode("@", $email); + $nick = $tmp[0]; + } + + $sql = "select mb_nick, mb_email from {$g5['member_table']} where mb_nick = '".$nick."' "; + + if( !empty($email) ){ + $sql .= sprintf(" or mb_email = '%s' ", $email); + } + + $result = sql_query($sql); + + $exists = array(); + + while($row=sql_fetch_array($result)){ + if($row['mb_nick'] && $row['mb_nick'] == $nick){ + $exists['mb_nick'] = $nick; + } + if($row['mb_email'] && $row['mb_email'] == $email){ + $exists['mb_email'] = $email; + } + } + + return $exists; + + } + + return null; +} + +function social_user_profile_replace( $mb_id, $provider, $profile ){ + global $g5; + + if( !$mb_id ) + return; + + // $profile 에 성별, 나이, 생일 등의 정보가 포함되어 있습니다. + + //받아온 정보를 암호화 하여 + $object_sha = sha1( serialize( $profile ) ); + + $provider = strtolower($provider); + + $sql = sprintf("SELECT mp_no, mb_id from {$g5['social_profile_table']} where provider= '%s' and identifier = '%s' ", $provider, $profile->identifier); + $result = sql_query($sql); + for($i=0;$row=sql_fetch_array($result);$i++){ //혹시 맞지 않는 데이터가 있으면 삭제합니다. + if( $row['mb_id'] != $mb_id ){ + sql_query(sprintf("DELETE FROM {$g5['social_profile_table']} where mp_no=%d", $row['mp_no'])); + } + } + + $sql = sprintf("SELECT mp_no, object_sha, mp_register_day from {$g5['social_profile_table']} where mb_id= '%s' and provider= '%s' and identifier = '%s' ", $mb_id, $provider, $profile->identifier); + + $row = sql_fetch($sql); + + $table_data = array( + "mp_no" => ! empty($row) ? $row['mp_no'] : 'NULL', + 'mb_id' => "'". $mb_id. "'", + 'provider' => "'". $provider . "'", + 'object_sha' => "'". $object_sha . "'", + 'mp_register_day' => ! empty($row) ? "'".$row['mp_register_day']."'" : "'". G5_TIME_YMDHIS . "'", + 'mp_latest_day' => "'". G5_TIME_YMDHIS . "'", + ); + + $fields = array( + 'identifier', + 'profileurl', + 'photourl', + 'displayname', + 'description', + ); + + foreach( (array) $profile as $key => $value ){ + $key = strtolower($key); + + if( in_array( $key, $fields ) ) + { + $value = (string) $value; + $table_data[ $key ] = "'". sql_real_escape_string($value). "'"; + } + } + + $fields = '`' . implode( '`, `', array_keys( $table_data ) ) . '`'; + $values = implode( ", ", array_values( $table_data ) ); + + $sql = "REPLACE INTO {$g5['social_profile_table']} ($fields) VALUES ($values) "; + + sql_query($sql); + + return sql_insert_id(); + +} + +function social_build_provider_config($provider){ + $setting = array( + 'base_url' => https_url(G5_PLUGIN_DIR.'/'.G5_SOCIAL_LOGIN_DIR).'/', + 'providers' => array( + $provider => array( + 'enabled' => true, + 'keys' => array( 'id' => null, 'key' => null, 'secret' => null ) + ) + ), + ); + + if( function_exists('social_extends_get_keys') ){ + $setting["providers"][$provider] = social_extends_get_keys($provider); + } + + return $setting; +} + +function social_extends_get_keys($provider){ + + global $config; + + static $r = array(); + + if ( empty($r) ) { + + // Naver + $r['Naver'] = array( + "enabled" => option_array_checked('naver', $config['cf_social_servicelist']) ? true : false, + "redirect_uri" => get_social_callbackurl('naver'), + "keys" => array( + "id" => $config['cf_naver_clientid'], + "secret" => $config['cf_naver_secret'], + ), + ); + + // Kakao + $r['Kakao'] = array( + "enabled" => option_array_checked('kakao', $config['cf_social_servicelist']) ? true : false, + "keys" => array("id" => $config['cf_kakao_rest_key'], + "secret" => $config['cf_kakao_client_secret'] ? $config['cf_kakao_client_secret'] : $config['cf_kakao_rest_key'] + ), + "redirect_uri" => get_social_callbackurl('kakao') + ); + + // Facebook + $r['Facebook'] = array( + "enabled" => option_array_checked('facebook', $config['cf_social_servicelist']) ? true : false, + "keys" => array("id" => $config['cf_facebook_appid'], "secret" => $config['cf_facebook_secret']), + "display" => "popup", + "redirect_uri" => get_social_callbackurl('facebook'), + "scope" => array('email'), // optional + "trustForwarded" => false + ); + + // Google + $r['Google'] = array( + "enabled" => option_array_checked('google', $config['cf_social_servicelist']) ? true : false, + "keys" => array("id" => $config['cf_google_clientid'], + "secret" => $config['cf_google_secret']), + "redirect_uri" => get_social_callbackurl('google'), + "scope" => "https://www.googleapis.com/auth/plus.login ". // optional + "https://www.googleapis.com/auth/plus.me ". // optional + "https://www.googleapis.com/auth/plus.profile.emails.read", // optional + //"access_type" => "offline", // optional + //"approval_prompt" => "force", // optional + ); + + // Twitter + $r['Twitter'] = array( + "enabled" => option_array_checked('twitter', $config['cf_social_servicelist']) ? true : false, + "keys" => array("key" => $config['cf_twitter_key'], "secret" => $config['cf_twitter_secret']), + "redirect_uri" => get_social_callbackurl('twitter'), + "trustForwarded" => false + ); + + // Payco + $r['Payco'] = array( + "enabled" => option_array_checked('payco', $config['cf_social_servicelist']) ? true : false, + "keys" => array("id" => $config['cf_payco_clientid'], "secret" => $config['cf_payco_secret']), + "redirect_uri" => get_social_callbackurl('payco'), + "trustForwarded" => false + ); + } + + return $r[$provider]; +} + +function social_escape_request($request){ + return clean_xss_tags( strip_tags($request) ); +} + +function social_get_request_provider(){ + $provider_name = isset($_REQUEST['provider']) ? ucfirst(social_escape_request($_REQUEST['provider'])) : ''; + + return $provider_name; +} + +function social_login_session_clear($mycf=0){ + $_SESSION["HA::STORE"] = array(); // used by hybridauth library. to clear as soon as the auth process ends. + $_SESSION["HA::CONFIG"] = array(); // used by hybridauth library. to clear as soon as the auth process ends. + set_session('sl_userprofile', ''); + set_session('social_login_redirect', ''); + if(!$mycf){ + set_session('ss_social_provider', ''); + } +} + +function social_session_exists_check(){ + + $provider_name = social_get_request_provider(); + + if(!$provider_name){ + return false; + } + + if( $provider_name && isset($_SESSION['HA::STORE']['hauth_session.'.strtolower($provider_name).'.is_logged_in']) && !empty($_SESSION['sl_userprofile'][$provider_name]) ){ + return json_decode($_SESSION['sl_userprofile'][$provider_name]); + } + + return false; +} + +function social_relace_nick($nick=''){ + + if( empty($nick) ) return ''; + + return preg_replace("/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i", "", $nick); +} + +function social_get_error_msg($type){ + ob_start(); + + switch( $type ){ + case 0 : echo "지정되지 않은 오류입니다."; break; + case 1 : echo "설정 오류입니다."; break; + case 2 : echo "해당 provider 설정 오류입니다."; break; + case 3 : echo "알수 없거나 비활성화 된 provider 입니다."; break; + case 4 : echo "해당 서비스에 접근할수 있는 권한이 없습니다."; break; + case 5 : echo "인증이 실패되었습니다.. " + . "사용자가 인증을 취소했거나, 공급자가 연결을 거부했습니다."; + break; + case 6 : echo "사용자 프로필 요청이 실패했습니다.사용자가 해당 서비스에 연결되어 있지 않을 경우도 있습니다. " + . "이 경우 다시 인증 요청을 해야 합니다."; + break; + case 7 : echo "사용자가 해당 서비스에 연결되어 있지 않습니다."; + break; + case 8 : echo "해당 서비스가 기능을 지원하지 않습니다."; break; + } + + $get_error = ob_get_clean(); + + return $get_error; +} + +if( !function_exists('replaceQueryParams') ){ + function replaceQueryParams($url, $params) + { + $query = parse_url($url, PHP_URL_QUERY); + parse_str($query, $oldParams); + + if (empty($oldParams)) { + return rtrim($url, '?') . '?' . http_build_query($params); + } + + $params = array_merge($oldParams, $params); + + return preg_replace('#\?.*#', '?' . http_build_query($params), $url); + } +} + +function social_loading_provider_page( $provider ){ + + social_login_session_clear(1); + + define('G5_SOCIAL_IS_LOADING', TRUE ); + + $login_action_url = G5_URL; + + $img_url = G5_SOCIAL_LOGIN_URL.'/img/'; + include_once(G5_SOCIAL_LOGIN_PATH.'/includes/loading.php'); +} + +function social_check_login_before($p_service=''){ + global $is_member, $member; + + $action = isset( $_REQUEST['action'] ) ? social_escape_request($_REQUEST['action']) : ''; + $provider_name = $p_service ? $p_service : social_get_request_provider(); + $url = isset($_REQUEST['url']) ? $_REQUEST['url'] : G5_URL; + $mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : 'login'; + $use_popup = G5_SOCIAL_USE_POPUP ? 1 : 2; + $ss_social_provider = get_session('ss_social_provider'); + + if( $provider_name ){ + + if( ! isset( $_REQUEST["redirect_to_idp"] ) ) + { + return social_loading_provider_page( $provider_name ); + } + + try + { + $adapter = social_login_get_provider_adapter( $provider_name ); + + // then grab the user profile + $user_profile = $adapter->getUserProfile(); + + if( ! (isset($_SESSION['sl_userprofile']) && is_array($_SESSION['sl_userprofile'])) ){ + $_SESSION['sl_userprofile'] = array(); + } + + if( ! $is_member ){ + $_SESSION['sl_userprofile'][$provider_name] = json_encode( $user_profile ); + } + } + + catch( Exception $e ) + { + $get_error = social_get_error_msg( $e->getCode() ); + + if( is_object( $adapter ) ){ + $adapter->logout(); + } + + include_once(G5_SOCIAL_LOGIN_PATH.'/error.php'); + exit; + } + + $register_url = G5_BBS_URL.'/register_form.php?provider='.$provider_name; + $register_action_url = G5_BBS_URL.'/register_form_update.php'; + + $login_action_url = G5_HTTPS_BBS_URL."/login_check.php"; + $mylink = (isset($_REQUEST['mylink']) && !empty($_REQUEST['mylink'])) ? 1 : 0; + + //소셜로 이미 가입 했다면 로그인 처리 합니다. + if( $user_provider = social_get_data('provider', $provider_name, $user_profile) ){ + + if( $is_member ){ + + $msg = "이미 로그인 하셨거나 잘못된 요청입니다."; + + if( $mylink ){ + $msg = "이미 연결된 아이디가 있거나, 잘못된 요청입니다."; + } + + if( $use_popup == 1 || ! $use_popup ){ //팝업이면 + alert_close( $msg ); + } else { + alert( $msg ); + } + + if( is_object( $adapter ) ){ //연결한것은 인증 받은 즉시 로그아웃한다. + social_logout_with_adapter($adapter); + } + exit; + } + + //데이터가 틀리면 데이터를 갱신 후 로그인 처리 합니다. + + $mb_id = $user_provider['mb_id']; + //이미 소셜로 가입된 데이터가 있다면 password를 필요하지 않으니, 패스워드를 무작위 생성하여 넘깁니다. + $mb_password = sha1( str_shuffle( "0123456789abcdefghijklmnoABCDEFGHIJ" ) ); + + echo social_return_from_provider_page( $provider_name, $login_action_url, $mb_id, $mb_password, $url, $use_popup ); + exit; + + //소셜 데이터와 회원데이터가 일치 하는 경우 계정와 연결할지, 새로 계정을 만들지 선택합니다. + } else { + + if( $is_member && !empty($user_profile) ){ //회원이면 + + if( $mylink ){ + + social_user_profile_replace($member['mb_id'], $provider_name, $user_profile); + + if( is_object( $adapter ) ){ //연결한것은 인증 받은 즉시 로그아웃한다. + social_logout_with_adapter($adapter); + } + + // 세션에 소셜정보가 없으면 연결된 소셜서비스를 저장합니다. + if( ! get_session('ss_social_provider') ){ + set_session('ss_social_provider', $provider_name); + } + + if( $use_popup == 1 || ! $use_popup ){ //팝업이면 + ?> + + $provider_name); + + $url = replaceQueryParams($url, $params); + goto_url($url); + } else { + goto_url(G5_URL); + } + } + exit; + } + + goto_url(G5_URL); + } + + if( !( property_exists($user_profile, 'sid') && !empty($user_profile->sid) ) ){ + $msg = '소셜 데이터 오류'; + if( $use_popup == 1 || ! $use_popup ){ //팝업이면 + alert_close($msg); + } else { + alert($msg); + } + } + + /* + * 회원이 아닌 경우에만 아래 실행 + */ + $register_url = G5_SOCIAL_LOGIN_URL.'/register_member.php?provider='.$provider_name; + + if( $url ){ + $register_url .= '&url='.urlencode($url); + } + + if( $use_popup == 1 || ! $use_popup ){ //팝업이면 + ?> + + displayName); + $member['mb_sex'] = $user_profile->gender; + $member['mb_email'] = ($user_profile->emailVerified) ? $user_profile->emailVerified : $user_profile->email; + + } + + return $member; +} + +function social_profile_img_resize($path, $file_url, $width, $height){ + + // getimagesize 경우 php.ini 에서 allow_url_fopen 이 활성화 되어 있어야 원격이미지를 읽어올수 있습니다. + list($w, $h, $ext) = @getimagesize($file_url); + if( $w && $h && $ext ){ + $ratio = max($width/$w, $height/$h); + $h = ceil($height / $ratio); + $x = ($w - $width / $ratio) / 2; + $w = ceil($width / $ratio); + + $tmp = imagecreatetruecolor($width, $height); + + if($ext == 1){ + $image = imagecreatefromgif($file_url); + } else if($ext == 3) { + $image = imagecreatefrompng($file_url); + } else { + $image = imagecreatefromjpeg($file_url); + } + imagecopyresampled($tmp, $image, + 0, 0, + $x, 0, + $width, $height, + $w, $h); + + switch ($ext) { + case '2': + imagejpeg($tmp, $path, 100); + break; + case '3': + imagepng($tmp, $path, 0); + break; + case '1': + imagegif($tmp, $path); + break; + } + + chmod($path, G5_FILE_PERMISSION); + + /* cleanup memory */ + imagedestroy($image); + imagedestroy($tmp); + } +} + +function social_is_login_check(){ + + //소셜 로그인이 맞는지 체크합니다. + if( social_session_exists_check() ){ + return true; + } + + return false; +} + +function social_logout_with_adapter($adapter=null){ + if( is_object( $adapter ) ){ + $adapter->logout(); + } + social_login_session_clear(1); +} + +function social_member_provider_manage(){ + global $member; + + return social_login_link_account($member['mb_id'], false, 'mb_form'); +} + +function social_member_comfirm_redirect(){ + global $is_member; + + if( !$is_member ){ + return; + } + + $provider_name = get_session('ss_social_provider'); + + if( social_get_provider_service_name($provider_name) ){ + + try + { + $adapter = social_login_get_provider_adapter( $provider_name ); + + // then grab the user profile + $user_profile = $adapter->getUserProfile(); + } + + catch( Exception $e ) + { + $get_error = social_get_error_msg( $e->getCode() ); + + if( is_object( $adapter ) ){ + social_logout_with_adapter($adapter); + } + + alert('SNS 사용자 인증에 실패하였습니다.', G5_URL); + } + + if( $user_provider = social_get_data('provider', $provider_name, $user_profile) ){ + + social_login_session_clear(1); + + $url = G5_BBS_URL.'/register_form.php'; + + $social_token = social_nonce_create($provider_name); + set_session('social_link_token', $social_token); + + $params = array('provider'=>$provider_name); + + $url = replaceQueryParams($url, $params); + goto_url($url); + + } + + set_session('ss_social_provider', ''); + alert('잘못된 요청입니다.', G5_URL); + } +} + +function social_is_login_password_check($mb_id){ + global $g5; + + $action = isset($_POST['action']) ? $_POST['action'] : ''; + $provider_name = social_get_request_provider(); + + if(!$mb_id || $action === 'link'){ //아이디가 없거나, 계정 연결이면 + if($action === 'link'){ //계정연결이면 같은 서비스명이 있는 경우 + + $sql = sprintf("select count(*) as num from {$g5['social_profile_table']} where provider = '%s' and mb_id = '%s' ", $provider_name, $mb_id); + + $row = sql_fetch($sql); + if( $row['num'] ){ + alert("해당 계정에 이미 $provider_name ID 가 연결되어 있습니다. 연결을 해제 후 다시 시도해 주세요."); + } + } + return false; + } + + //소셜 로그인이 맞는지 체크합니다. + if( $user_profile = social_session_exists_check() ){ + + // db에 이미 쇼셜 계정이 존재하는 경우에는 + if( $user_provider = social_get_data('provider', $provider_name, $user_profile) ){ + + if($user_provider['mb_id'] == $mb_id) + return true; + } + } + + return false; +} + +//소셜 로그인 후 계정 업데이트 +function social_login_success_after($mb, $link='', $mode='', $tmp_create_info=array()){ + global $g5, $config; + + $provider = social_get_request_provider(); + + if( isset($mb['mb_id']) && !empty($mb['mb_id']) && $provider && $user_profile = social_session_exists_check() ){ + + $mb_id = $mb['mb_id']; + //로그인에 성공 했으면 기존 데이터와 비교하여 틀린 값이 없으면 업데이트 합니다. + social_user_profile_replace($mb_id, $provider, $user_profile); + + //소셜로그인의 provider 이름( naver, kakao, facebook 기타 등등 ) 서비스 이름을 세션에 입력합니다. + set_session('ss_social_provider', $provider); + + //소셜로그인 최초 받아온 세션에 저장된 값을 삭제합니다. + if( isset($_SESSION['sl_userprofile']) && isset($_SESSION['sl_userprofile'][$provider]) ){ + unset($_SESSION['sl_userprofile'][$provider]); + } + + if($mode=='register'){ //회원가입 했다면 + return; + } + + } + + return $link; +} + +function social_login_link_account($mb_id, $is_buffer=false, $is_type=''){ + global $g5, $is_admin, $is_guest, $member, $config; + + if( !$mb_id ) + return; + + $sql = "select * from {$g5['social_profile_table']} where mb_id = '".$mb_id."' "; + + $result = sql_query($sql); + + $my_social_accounts = array(); + + for($i=0;$row=sql_fetch_array($result);$i++){ + $my_social_accounts[] = $row; + } + + if( $is_type === 'get_data' ){ + return $my_social_accounts; + } + + ob_start(); + + if( $is_type === 'mb_form' ) { + + global $urlencode; + + static $social_pop_once; + + $my_provides = array(); + + foreach( $my_social_accounts as $account ){ + $my_provides[] = strtolower($account['provider']); + } + + $self_url = G5_BBS_URL."/login.php"; + + //새창을 사용한다면 + if( G5_SOCIAL_USE_POPUP ) + $self_url = G5_SOCIAL_LOGIN_URL.'/popup.php'; + + include(get_social_skin_path().'/social_u_register_form.skin.php'); + } + + $html = ob_get_clean(); + + if($is_buffer){ + return $html; + } else { + echo $html; + } +} + +function social_get_provider_service_name($provider='', $all=''){ + + $services = array( + 'naver' => '네이버', + 'kakao' => '카카오', + 'daum' => '다음', + 'facebook' => '페이스북', + 'google' => '구글', + 'twitter' => '트위터', + 'payco' => '페이코', + ); + + if( $all ){ + return $services; + } + + $provider = $provider ? strtolower($provider) : ''; + + return ($provider && isset($services[$provider])) ? $services[$provider] : ''; +} + +function social_provider_logout($provider='', $session_delete=1){ + + $provider = $provider ? $provider : get_session('ss_social_provider'); + + if( $provider ){ + + try + { + if( ! class_exists( 'Hybrid_Auth', false ) ) + { + include_once G5_SOCIAL_LOGIN_PATH . "/Hybrid/Auth.php"; + } + + Hybrid_Auth::logoutAllProviders(); + + /* + if( $adapter = social_login_get_provider_adapter( $provider ) ){ + $adapter->logout(); + } + */ + if( $session_delete ) + set_session('ss_social_provider', ''); + } + + catch( Exception $e ){ + if( is_object( $adapter ) ){ + social_logout_with_adapter($adapter); + } + } + } +} + +//회원 연결을 해제하거나 회원 탈퇴시 +function social_member_link_delete($mb_id, $mp_no=''){ + + global $g5; + + if(!$mb_id) + return; + + $mp_no = (int) $mp_no; + + if( G5_SOCIAL_DELETE_DAY > 0 ){ + + //mb_id가 없는 소셜 데이터 중에 해당 기간이 넘어간 db 데이터를 삭제합니다. + $time = date("Y-m-d H:i:s", time() - (86400 * (int) G5_SOCIAL_DELETE_DAY)); + + $sql = "delete from {$g5['social_profile_table']} where mb_id = '' and mp_latest_day < '$time' "; + sql_query($sql); + + $sql = "update {$g5['social_profile_table']} set mb_id='', object_sha='', profileurl='', photourl='', displayname='', mp_latest_day = '".G5_TIME_YMDHIS."' where mb_id= '".$mb_id."'"; + } else { + $sql = "delete from {$g5['social_profile_table']} where mb_id= '".$mb_id."'"; //바로 삭제합니다. + } + + if($mp_no){ + $sql .= " and mp_no=$mp_no"; + } + + sql_query($sql, false); +} + +function social_service_check($provider){ + global $config; + + if( $config['cf_social_servicelist'] && option_array_checked($provider, $config['cf_social_servicelist']) ) { + return true; + } + + return false; +} + +function exist_mb_id_recursive($mb_id){ + static $count = 0; + + $mb_id_add = ($count > 0) ? $mb_id.(string)$count : $mb_id; + + if( ! exist_mb_id($mb_id_add) ){ + return $mb_id_add; + } + + $count++; + return exist_mb_id_recursive($mb_id); +} + +function exist_mb_nick_recursive($mb_nick){ + static $count = 0; + + $mb_nick_add = ($count > 0) ? $mb_nick.(string)$count : $mb_nick; + + if( ! exist_mb_nick($mb_nick_add, '') ){ + return $mb_nick_add; + } + + $count++; + return exist_mb_nick_recursive($mb_nick); +} + +function social_get_nonce($key=''){ + if( $key == 'd' ){ //nonce_duration + return 7200; + } else if ($key == 'n' ){ //nonce_name + return '_nonce'; + } else { + + if( empty($key) ) + $key = social_get_request_provider(); + + $setting = social_build_provider_config($key); + try{ + return sha1($setting['providers'][$key]['secret']); + } catch(Exception $e) { + return ''; + } + } + + return ''; +} + +function social_nonce_create_query_string( $action = '' , $user = '', $provider = '' ){ + if($nonce_key=social_get_nonce('n')){ + return $nonce_key."=".social_nonce_create( $action , $user, $provider ); + } + return ''; +} + +function social_nonce_create( $action = '' , $user='' , $provider = '' ){ + return substr( social_nonce_generate_hash( $action , $user, $provider ), -12, 10); +} + +function social_nonce_is_valid( $nonce , $action = '' , $user='' , $provider = '' ){ + // Nonce generated 0-12 hours ago + if ( substr(social_nonce_generate_hash( $action , $user, $provider ), -12, 10) == $nonce ){ + return true; + } + return false; +} + +function social_nonce_generate_hash( $action='' , $user='', $provider = '' ){ + $i = ceil( time() / ( social_get_nonce('d') / 2 ) ); + return md5( $i . $action . $user . social_get_nonce($provider) ); +} +?> \ No newline at end of file diff --git a/plugin/social/includes/g5_endpoint.php b/plugin/social/includes/g5_endpoint.php new file mode 100644 index 000000000..0eda8063a --- /dev/null +++ b/plugin/social/includes/g5_endpoint.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/plugin/social/includes/g5_endpoint_class.php b/plugin/social/includes/g5_endpoint_class.php new file mode 100644 index 000000000..29c8f4304 --- /dev/null +++ b/plugin/social/includes/g5_endpoint_class.php @@ -0,0 +1,32 @@ +dieError( "412 Precondition Failed", $e->getMessage(), $e ); + } + } + + protected function processAuthDone() + { + try { + parent::processAuthDone(); + } + catch( Exception $e ){ + $this->dieError( "410 Gone", $e->getMessage(), $e ); + } + } + + public function dieError( $code, $message, $e ) + { + $get_error = $message; + include_once(G5_SOCIAL_LOGIN_PATH.'/error.php'); + die(); + } +} +?> \ No newline at end of file diff --git a/plugin/social/includes/index.php b/plugin/social/includes/index.php new file mode 100644 index 000000000..e69de29bb diff --git a/plugin/social/includes/loading.php b/plugin/social/includes/loading.php new file mode 100644 index 000000000..61a428427 --- /dev/null +++ b/plugin/social/includes/loading.php @@ -0,0 +1,68 @@ + + + + + + + 소셜 로그인 - <?php echo $provider; ?> + + + + + + + + + + + + +

      Loading...


      에 연결중입니다. 잠시만 기다려주세요.
      + + + + +
      + + + + +
      + + + + + \ No newline at end of file diff --git a/plugin/social/includes/providers.php b/plugin/social/includes/providers.php new file mode 100644 index 000000000..ce196085b --- /dev/null +++ b/plugin/social/includes/providers.php @@ -0,0 +1,244 @@ + "Facebook", + "provider_name" => "Facebook", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://developers.facebook.com/apps", + "default_api_scope" => "email, public_profile, user_friends", + + "default_network" => true, + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Google", + "provider_name" => "Google", + "callback" => true, + "require_client_id" => true, + "new_app_link" => "https://console.developers.google.com", + "default_api_scope" => "profile https://www.googleapis.com/auth/plus.profile.emails.read", + + "default_network" => true, + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Twitter", + "provider_name" => "Twitter", + "callback" => true, + "new_app_link" => "https://dev.twitter.com/apps", + + "default_network" => true, + "cat" => "microblogging", + ), + ARRAY( + "provider_id" => "WordPress", + "provider_name" => "WordPress", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://developer.wordpress.com/apps/new/", + + "cat" => "blogging", + ), + ARRAY( + "provider_id" => "Yahoo", + "provider_name" => "Yahoo!", + "new_app_link" => null, + + "cat" => "pleasedie", + ), + ARRAY( + "provider_id" => "LinkedIn", + "provider_name" => "LinkedIn", + "new_app_link" => "https://www.linkedin.com/secure/developer", + + "cat" => "professional", + ), + ARRAY( + "provider_id" => "Disqus", + "provider_name" => "Disqus", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://disqus.com/api/applications/", + + "cat" => "misc", + ), + ARRAY( + "provider_id" => "Instagram", + "provider_name" => "Instagram", + "callback" => true, + "require_client_id" => true, + "new_app_link" => "http://instagr.am/developer/clients/manage/", + + "cat" => "media", + ), + ARRAY( + "provider_id" => "Reddit", + "provider_name" => "Reddit", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://ssl.reddit.com/prefs/apps", + + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Foursquare", + "provider_name" => "Foursquare", + "callback" => true, + "require_client_id" => true, + "new_app_link" => "https://www.foursquare.com/oauth/", + + "cat" => "microblogging", + ), + ARRAY( + "provider_id" => "LastFM", + "provider_name" => "Last.FM", + "new_app_link" => "http://www.lastfm.com/api/account", + + "cat" => "media", + ), + ARRAY( + "provider_id" => "Tumblr", + "provider_name" => "Tumblr", + "new_app_link" => "http://www.tumblr.com/oauth/apps", + + "cat" => "microblogging", // o well + ), + ARRAY( + "provider_id" => "Goodreads", + "provider_name" => "Goodreads", + "callback" => true, + "new_app_link" => "http://www.goodreads.com/api", + + "cat" => "media", + ), + ARRAY( + "provider_id" => "Stackoverflow", + "provider_name" => "Stackoverflow", + "new_app_link" => null, + + "cat" => "programmers", + ), + ARRAY( + "provider_id" => "GitHub", + "provider_name" => "GitHub", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://github.com/settings/applications/new", + "default_api_scope" => "user:email", + + "cat" => "programmers", + ), + ARRAY( + "provider_id" => "Dribbble", + "provider_name" => "Dribbble", + "require_client_id" => true, + "custom_callback" => true, + "new_app_link" => "https://dribbble.com/account/applications/new", + + "cat" => "designers", + ), + ARRAY( + "provider_id" => "500px", + "provider_name" => "px500", + "new_app_link" => "http://developers.500px.com/", + + "cat" => "media", + ), + ARRAY( + "provider_id" => "Skyrock", + "provider_name" => "Skyrock", + "callback" => true, + "new_app_link" => "https://www.skyrock.com/developer/application", + + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Mixi", + "provider_name" => "Mixi", + "new_app_link" => null, + + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Steam", + "provider_name" => "Steam", + "new_app_link" => "http://steamcommunity.com/dev/apikey", + "require_api_key" => true, + + "cat" => "gamers", + ), + ARRAY( + "provider_id" => "TwitchTV", + "provider_name" => "Twitch.tv", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "http://www.twitch.tv/settings?section=applications", + + "cat" => "gamers", + ), + ARRAY( + "provider_id" => "Vkontakte", + "provider_name" => "ВКонтакте", + "callback" => true, + "require_client_id" => true, + "new_app_link" => "http://vk.com/developers.php", + + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "Mailru", + "provider_name" => "Mailru", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "http://api.mail.ru/", + + "cat" => "misc", + ), + ARRAY( + "provider_id" => "Yandex", + "provider_name" => "Yandex", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://oauth.yandex.ru", + + "cat" => "misc", + ), + ARRAY( + "provider_id" => "Odnoklassniki", + "provider_name" => "Odnoklassniki", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "http://dev.odnoklassniki.ru/", + + "cat" => "socialnetworks", + ), + ARRAY( + "provider_id" => "AOL", + "provider_name" => "AOL", + "new_app_link" => null, + + "cat" => "pleasedie", + ), + ARRAY( + "provider_id" => "Live", + "provider_name" => "Windows Live", + "require_client_id" => true, + "new_app_link" => "https://account.live.com/developers/applications/create", + + "cat" => "pleasedie", + ), + ARRAY( + "provider_id" => "PixelPin", + "provider_name" => "PixelPin", + "require_client_id" => true, + "callback" => true, + "new_app_link" => "https://login.pixelpin.co.uk/", + + "cat" => "misc", + ), +); + +?> \ No newline at end of file diff --git a/plugin/social/index.php b/plugin/social/index.php new file mode 100644 index 000000000..eb3b1288c --- /dev/null +++ b/plugin/social/index.php @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/plugin/social/register_member.php b/plugin/social/register_member.php new file mode 100644 index 000000000..4451c3b61 --- /dev/null +++ b/plugin/social/register_member.php @@ -0,0 +1,52 @@ +displayName); +$user_email = isset($user_profile->emailVerified) ? $user_profile->emailVerified : $user_profile->email; +$user_id = $user_profile->sid ? preg_replace("/[^0-9a-z_]+/i", "", $user_profile->sid) : get_social_convert_id($user_profile->identifier, $provider_name); + +//$is_exists_id = exist_mb_id($user_id); +//$is_exists_name = exist_mb_nick($user_nick, ''); +$user_id = exist_mb_id_recursive($user_id); +$user_nick = exist_mb_nick_recursive($user_nick, ''); +$is_exists_email = $user_email ? exist_mb_email($user_email, '') : false; + +// 불법접근을 막도록 토큰생성 +$token = md5(uniqid(rand(), true)); +set_session("ss_token", $token); + +$g5['title'] = '소셜 회원 가입 - '.social_get_provider_service_name($provider_name); + +include_once(G5_BBS_PATH.'/_head.php'); + +$register_action_url = https_url(G5_PLUGIN_DIR.'/'.G5_SOCIAL_LOGIN_DIR, true).'/register_member_update.php'; +$login_action_url = G5_HTTPS_BBS_URL."/login_check.php"; +$req_nick = !isset($member['mb_nick_date']) || (isset($member['mb_nick_date']) && $member['mb_nick_date'] <= date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400))); +$required = ($w=='') ? 'required' : ''; +$readonly = ($w=='u') ? 'readonly' : ''; + +include_once(get_social_skin_path().'/social_register_member.skin.php'); + +include_once(G5_BBS_PATH.'/_tail.php'); +?> diff --git a/plugin/social/register_member_update.php b/plugin/social/register_member_update.php new file mode 100644 index 000000000..2fbec2f98 --- /dev/null +++ b/plugin/social/register_member_update.php @@ -0,0 +1,191 @@ +sid; +$mb_id = trim($_POST['mb_id']); +$mb_password = trim($_POST['mb_password']); +$mb_password_re = trim($_POST['mb_password_re']); +$mb_nick = trim(strip_tags($_POST['mb_nick'])); +$mb_email = trim($_POST['mb_email']); +$mb_name = clean_xss_tags(trim(strip_tags($_POST['mb_name']))); +$mb_email = get_email_address($mb_email); + +// 이름, 닉네임에 utf-8 이외의 문자가 포함됐다면 오류 +// 서버환경에 따라 정상적으로 체크되지 않을 수 있음. +$tmp_mb_name = iconv('UTF-8', 'UTF-8//IGNORE', $mb_name); +if($tmp_mb_name != $mb_name) { + $mb_name = $tmp_mb_name; +} +$tmp_mb_nick = iconv('UTF-8', 'UTF-8//IGNORE', $mb_nick); +if($tmp_mb_nick != $mb_nick) { + $mb_nick = $tmp_mb_nick; +} + +if( ! $mb_nick || ! $mb_name ){ + $tmp = explode('@', $mb_email); + $mb_nick = $mb_nick ? $mb_nick : $tmp[0]; + $mb_name = $mb_name ? $mb_name : $tmp[0]; +} + +if( ! isset($mb_password) || ! $mb_password ){ + + $mb_password = md5(pack('V*', rand(), rand(), rand(), rand())); + +} + +if ($msg = empty_mb_name($mb_name)) alert($msg, "", true, true); +if ($msg = empty_mb_nick($mb_nick)) alert($msg, "", true, true); +if ($msg = empty_mb_email($mb_email)) alert($msg, "", true, true); +if ($msg = reserve_mb_id($mb_id)) alert($msg, "", true, true); +if ($msg = reserve_mb_nick($mb_nick)) alert($msg, "", true, true); +// 이름에 한글명 체크를 하지 않는다. +//if ($msg = valid_mb_name($mb_name)) alert($msg, "", true, true); +if ($msg = valid_mb_nick($mb_nick)) alert($msg, "", true, true); +if ($msg = valid_mb_email($mb_email)) alert($msg, "", true, true); +if ($msg = prohibit_mb_email($mb_email))alert($msg, "", true, true); + +if ($msg = exist_mb_id($mb_id)) alert($msg); +if ($msg = exist_mb_nick($mb_nick, $mb_id)) alert($msg, "", true, true); +if ($msg = exist_mb_email($mb_email, $mb_id)) alert($msg, "", true, true); + +$data = array( +'mb_id' => $mb_id, +'mb_password' => get_encrypt_string($mb_password), +'mb_nick' => $mb_nick, +'mb_email' => $mb_email, +'mb_name' => $mb_name, +); + +$mb_email_certify = G5_TIME_YMDHIS; + +//메일인증을 사용한다면 +if( defined('G5_SOCIAL_CERTIFY_MAIL') && G5_SOCIAL_CERTIFY_MAIL && $config['cf_use_email_certify'] ){ + $mb_email_certify = ''; +} + +//회원 메일 동의 +$mb_mailling = (isset($_POST['mb_mailling']) && $_POST['mb_mailling']) ? 1 : 0; +//회원 정보 공개 +$mb_open = (isset($_POST['mb_open']) && $_POST['mb_open']) ? 1 : 0; + +// 회원정보 입력 +$sql = " insert into {$g5['member_table']} + set mb_id = '{$mb_id}', + mb_password = '".get_encrypt_string($mb_password)."', + mb_name = '{$mb_name}', + mb_nick = '{$mb_nick}', + mb_nick_date = '".G5_TIME_YMD."', + mb_email = '{$mb_email}', + mb_email_certify = '".$mb_email_certify."', + mb_today_login = '".G5_TIME_YMDHIS."', + mb_datetime = '".G5_TIME_YMDHIS."', + mb_ip = '{$_SERVER['REMOTE_ADDR']}', + mb_level = '{$config['cf_register_level']}', + mb_login_ip = '{$_SERVER['REMOTE_ADDR']}', + mb_mailling = '{$mb_mailling}', + mb_sms = '0', + mb_open = '{$mb_open}', + mb_open_date = '".G5_TIME_YMD."' "; + +$result = sql_query($sql, false); + +if($result) { + + // 회원가입 포인트 부여 + insert_point($mb_id, $config['cf_register_point'], '회원가입 축하', '@member', $mb_id, '회원가입'); + + // 최고관리자님께 메일 발송 + if ($config['cf_email_mb_super_admin']) { + $subject = '['.$config['cf_title'].'] '.$mb_nick .' 님께서 회원으로 가입하셨습니다.'; + + ob_start(); + include_once (G5_BBS_PATH.'/register_form_update_mail2.php'); + $content = ob_get_contents(); + ob_end_clean(); + + mailer($mb_nick, $mb_email, $config['cf_admin_email'], $subject, $content, 1); + } + + $mb = get_member($mb_id); + + //소셜 로그인 계정 추가 + if( function_exists('social_login_success_after') ){ + social_login_success_after($mb, '', 'register'); + } + + set_session('ss_mb_reg', $mb['mb_id']); + + if( !empty($user_profile->photoURL) && ($config['cf_register_level'] >= $config['cf_icon_level']) ){ //회원 프로필 사진이 있고, 회원 아이콘를 올릴수 있는 조건이면 + + // 회원아이콘 + $mb_dir = G5_DATA_PATH.'/member/'.substr($mb_id,0,2); + @mkdir($mb_dir, G5_DIR_PERMISSION); + @chmod($mb_dir, G5_DIR_PERMISSION); + $dest_path = "$mb_dir/$mb_id.gif"; + + social_profile_img_resize($dest_path, $user_profile->photoURL, $config['cf_member_icon_width'], $config['cf_member_icon_height'] ); + + // 회원이미지 + if( is_dir(G5_DATA_PATH.'/member_image/') ) { + $mb_dir = G5_DATA_PATH.'/member_image/'.substr($mb_id,0,2); + @mkdir($mb_dir, G5_DIR_PERMISSION); + @chmod($mb_dir, G5_DIR_PERMISSION); + $dest_path = "$mb_dir/$mb_id.gif"; + + social_profile_img_resize($dest_path, $user_profile->photoURL, $config['cf_member_img_width'], $config['cf_member_img_height'] ); + } + } + + if( $mb_email_certify ){ //메일인증 사용 안하면 + + //바로 로그인 처리 + set_session('ss_mb_id', $mb['mb_id']); + + } else { // 메일인증을 사용한다면 + $subject = '['.$config['cf_title'].'] 인증확인 메일입니다.'; + + // 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용 + $mb_md5 = md5(pack('V*', rand(), rand(), rand(), rand())); + + sql_query(" update {$g5['member_table']} set mb_email_certify2 = '$mb_md5' where mb_id = '$mb_id' "); + + $certify_href = G5_BBS_URL.'/email_certify.php?mb_id='.$mb_id.'&mb_md5='.$mb_md5; + + ob_start(); + include_once (G5_BBS_PATH.'/register_form_update_mail3.php'); + $content = ob_get_contents(); + ob_end_clean(); + + mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content, 1); + } + + // 사용자 코드 실행 + @include_once ($member_skin_path.'/register_form_update.tail.skin.php'); + + goto_url(G5_HTTP_BBS_URL.'/register_result.php'); + +} else { + + alert('회원 가입 오류!', G5_URL ); + +} +?> \ No newline at end of file diff --git a/plugin/social/unlink.php b/plugin/social/unlink.php new file mode 100644 index 000000000..5d20bebe4 --- /dev/null +++ b/plugin/social/unlink.php @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/skin/board/basic/img/btn_next2.gif b/skin/board/basic/img/btn_next2.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ec94650a55df093e69afc30b366af38f10d4166 GIT binary patch literal 1898 zcmZ?wbhEHb^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$+|-gp zg^Jvqyke^gTcyO5{G?PXAR8pCucQE0Qj%?}vtM~P_^2{qPNz6-5^>ndS0-B(gnVDi`U})iN>1b)}>f&r-Xy|I@WZ-D*;%4aP z;$~!EX<}gv)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSu_6s_xI25Uq63* z|MvCE=T9F$ynpxh&Ffb$Up#;I^vUB#4%#K*+RD$;tWu|G(mY?g-xi1((E!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qXu2*iX zmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2NtnTP2`N zAzsKW@b!fooL8&|_K;q3ey)B+Vu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9lvsNTp{2Q{sk4i#fw7aJnUSH3Im`@fdL5nIoGnev9bH|VjSUT5&74duEnJ-~ zOpVN(UCd1koMC!B^NLFn^O93x_GSX@h3d7$tJli8C^fMpzbGU>KL?fq0y6ST@{2R_ z3lyA#%@j1kGxJjN%ZoKZ(F5_VOKMSOS!#+~QGTuhIDD-#vDj~HQ=>r|34@w+Ji3KJEOo1RKJm~{D@XV8%2h1@=z^uXe z|KHy~zkmJw@%`J^FP}es{P6zW+c&RYy?pWf+0!SFA3c0<|K8m@w{P9NasArWE0-@_ zym0>9*)yk4ojh^;*wG`04;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu+0rG8 z7cE>cf8N|VvuDkmF@4(9DU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8 zSdgEWo0FZDnUS8Bnv$H9m=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ4Mj8G>>2YWkP z8*3{|3v)A56JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp9 z4t6$H7G@?!1_s5SEI^WxL5BedKqU_YlSEH`1N*MMOf`JI(UE@9?*BYxf5e7lM6ohh F0{~W;oRI(k literal 0 HcmV?d00001 diff --git a/skin/board/basic/img/close_btn.png b/skin/board/basic/img/close_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..50e9f26efe0886d2b17fb435f1a1f2ca5398ab31 GIT binary patch literal 1147 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 qkCV?y5r00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/skin/board/basic/img/icon_file.gif b/skin/board/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/skin/board/basic/img/icon_good.png b/skin/board/basic/img/icon_good.png new file mode 100644 index 0000000000000000000000000000000000000000..69841a1340a76f2b4bfeb4a3a9e74b8a5846fe43 GIT binary patch literal 1288 zcmbVMZA{!`9Pfq1I3`QxTc&=n7KtP5t}l1(T`MO!+PiVnyJN>0&WwBEfC(!}ei*Fj>^OWDGN(0*8Je`(V?j z&)fg^`@eUnIk~f{^3h5JL8{_SLK@Cn-Er?d@cXp7a|uq5*wL)rqUY?QXaXc6>m2}% zt70ce15xgM@jR$Ukcym=$=cb(bDX5BKGBu&IjRBC2vXnR7@|}FHrfF?6)lWipZo$t z6*-Kx(g`AA@F1@=^_ifhFPV}03KA=04bPzU4hIQTV2h}uc54>rgs~M~4zAr}979(` z>_Qk@H7c8EMtR)?DDCrmC4wYThVhXBnqkNtC`FJIPQaJ(k^zopI4X#)Js8wx$~i7A z#MX4dT^P&Tw!z_eu~_sK{XX67#7UNAT@H%!LJ6PKqSU6p#T#VSU*WdnGnnRSt=SMLm@vyM))!|u35IINuaD(fqK`l z^j)zWZvxTQ&5W*hmn)z-uiLtn*A0|!VbJZZiYDtttJY1=s<#3#m6w1VGj$bRi7%&Y zpx;mNQ3?*CG0Ly_%|{4!*b2hKZZ{{_(Jop+76y-KXW$q_Xo-O%a=aC`cZ1WboBP*_w2RP7iz}1 zV^=nX_v6!qt#o-lU7Q+y{Qf8J%TJ%W{NCIhGTuZlyfwY$jBz-(>G0xL74Q7;`q;^^ zlKIAaa(kr{`;g;i@Po#IUir7dns1#{!}Otrh64j_??1->a;J+Je0g$qPisy6$NN4T zPqw!SQ$&}fX;VWZBX4r0V*ku*{d+e*Fwy!--PpjXRQ0HnPcMv*{Q2;5^>P0CkA>4u zBtqvLvG3W^1y4>o7}`fC^aW*U8M$=p`LEtQ*YwDiOn)&_i-FLfo-m9wo z`|J0u%&d1icYVEm_r>BxZ?|rFGGXHDwQFCm-*CUS=J$v9pH827v1swLIkVqv-S&FT znm60GKA$`H`~63^^YZTG=H0KWebV3eV)0@i<6e3B&6LzPTeklF^XuipMep|=`2YVu z17$$*CkrD3gBF7h$QY2H7}#PQLY*8Z>1a(npuSj&!C+2M$D^Au49rIzmu_NUkbT$K z@N|_DYcbb>j2Wy<#m#{VN6yADE^Oe)_z)w+$e|_7pjN@jAe_d}prOvK#K7Mmz^JUi QD9{kY$HvB2;mBYO0LU4C3IG5A literal 97 zcmZ?wbhEHbe)HzdzkmOpK7G1o&6@rD_kZ~C z0Z6`l`EvdG^($7a`10k;@87>SZ{B?6%9V{9H=a0gV&A@fKwYO#pT2+p{)-ncfKov2 zr%#`N;f!KYsiGiW~)lhIr>|74(23<(<=9yw$9#m#@ra2-+bRv!3%fd0dBQ?f)ODm;T_l^Ed4xq>LVCj3 U#2LJNXZi*?xy@tnaAdFs0Qg;*ivR!s literal 145 zcmZ?wbhEHbzHen|7VvwFnzUPlarEA ZqW~YXyUO~T+#YkUoJ%KCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/skin/board/basic/img/icon_lock.png b/skin/board/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; R(%cf16Zrr$W z{rdHjCr{3vJ$vQKmCv3%n>1@!i5WK)~q>x{P^O< zi?3e2x^LgUUAuPu`Sa)6wQGO>{=Iqg=C5DBwt~R}F!=xfKLeG3;!hSv1_pHo9guk- zKQXWs9GJXe!Gr(?hAx*t0V{byl?6c)-Q>=>GF;f9(9+?}ED$k=Bf9zd1Wy$s_Wnkn z84PU88y&a=9iSXMhSSOWmH3xI$C literal 62 zcmZ?wbhEHb3@AOMLlFzK}PuRQ&h|M0|xLCPCfS!F+{3@-DP f-?4DY(nWejQ)6d06;;oc{oQqepNC77mBAVS=eiro literal 71 zcmZ?wbhEHbZ% diff --git a/skin/board/basic/img/icon_reply.gif b/skin/board/basic/img/icon_reply.gif index 91c135977b4f445a90c849310dc80efde1983830..7fe2c65580ed22e254718fdd45ed93efb554672d 100644 GIT binary patch literal 1187 zcmZ?wbhEHbCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ke6^lgE!9KDdAH?w#AWZr-?l?dp}w zmo8p7f9~v=)2B|JIDYKtk;8`$9@xKc@1EVecJA1|ZR?iJn>KD(zi#cC)vH#nSiWrO zlEsS_E|@=W?wr}PX3m&CZR(WClO|5+@9XX9?&|DlZ)CJqCAJzX7bElmw|HB}X5B}D~!IawKLDM<-&F;Nj=AwdCtK3*Pf zE=~@1HdYp9CPoGZ#h)xdl954&0SG`P4+E1_OY=;&S8qgOKCNk!;0vz)T^YHC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/skin/board/basic/img/icon_share.png b/skin/board/basic/img/icon_share.png new file mode 100644 index 0000000000000000000000000000000000000000..6d64f625a32da82e5ae80ed050aa5da7122902c2 GIT binary patch literal 3064 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003aNklTLwxV&xyH$jIXun(L8cR(Wst_=BVsn=QN3)UM= z{3QJhd;zDKw3Cz{X6lK3AYL2B@bM6M52dX)&Vjd}wrO~&*ZBtOz*8m*TsZ5mE&SP@ zf>;m>VnN)Vm;y7u^hZE~r0_(NUbT*iMLdy#Z2kV4Ge~M14F-}P{e38@;v{_nd%-XV zz;bJQx<>upM~QsgRk9ua|C|AK%NfgXB&CvO-ky=9WHkUyf#B-@x?!6D0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004HNklHi{DTb1*jcrauriJho4x(d+gyTuHYJ;;z=4FOos|4v4T1pxR1-Y zjl1Z|2UmB~m&z!Hs?a0QT zU}HlJNKAlWMdBCm7Z{k?IHz%8s5)TTzOUzb-j93VS9`mU*H$-HB}rQA@8F>ruZeH{ z`il79(KmmJ;T{jhe4kGFJYq!h5;`HEpGAjcNTTHQ`8Tp9Nv&x*8uRhsi4)UIiE4~e zWrbi%($;oWMDY>fU_uVl+?9WQ{33%iapePjpbZM2%+j4RM)uEkNAcNFY$x*eBd}FD zLLehN0#$aLmrmu%3tdOd>upsA3kW}Q<#VUTgFWC=Mu4t#+OY;9FboBDb;E!U0n#8+ zHSrp4*mZQnK_*x}varUIsWZgk(w11c@{IGsQPuf;uFN|MWrr%XZM)V$s4Wof@-*jB z)y~V!MgfyDW@*7wnuA&~n$Q#O%EHt05VB%0xDd|EWuipN)G8`esAy`I)p0G*B_EQ% zZd{5kN2di*hoqz@EEe}M-E7DrcUK##fx;W-DNDtrM8}xMCmG3kAG@+RQIa%qFtR+o zW7+}2I4~fzO?On-rd`2Qp*@)8PrULe6l+$uX3*he?;Qm3HCv;vusITWdT1;5_f+QiM z8Cc}kNiVUlb%MYP&7cbde-XFuX&C8x*YrXkS(d!yCjXN&RXC&8#qm$EG+Uwq>*+=5 zi^WCrkX&>O6RmN>`(C%z?LPKK)sM+1_8Z-5wOViPg0Is14=bEm_7L#sBtRF5+bZX+C#7^urYZBY(0!yiqNNf2KbK)0BR-RP@zdo6HJ|iG^BCa5F7?#5?nZ-4hg{lAu$fLXon#|%jYyH9I73# zY=1v~p6C7f-q&x8jtuV)JsBbhVt?+GQo!Q@|JfVF?-Sp>^E@7UTy@MXqN>}_Y)GVa zRE8jDY7?*kHGOva9vmcy&ZN-)x5Cf^tBZf=u~W@?i$Df zzM@t}Gj5W?o^FR=*7NxtVasVH3a5=>*cI)RX6ukHKnKm( z6?`7mzBU=>?(v3vAofOj(Khg*Xj2NR%$U$}b4rrJUn07pOA41r^U=7da*Cn~EGx!E zURG2lnqdWwRpM=p-MAu?&I+-NsLHa)vZ|2g8CI1US&pkwUXJZ>bC%<3Rt2{08rW`& zn|Lf&l5MED$Sxr?)vkci8gh|SLvGzLkJ6Z+W#yO~GZDfLGekEfU z`%F|-)7iKh!yY%|meY*F@q8?v&dOXOLAAL0|H&DRouU2W_)oF4w{Qje)1A`Ci=F0y z7Va1ux5m=32j37xMiq zJLKa1C7$hMyGgXCJaK*PRd6MA_l1Q=LGlK{9w2|~yg5K3MF2hb9v(`4{njtXJHW}s zYhNB6|Ko6J{b|zqY5m;8{xPc7S{uH8>2RuRF?l`_T>0S7rJt`Z@AKr5 hVCZu7y(G~QB)VQHjxXGLX~6%>', 0); ?> -

      목록

      -
      + + +
      +
      + Total + 페이지 +
      + + + + +
      + +
      @@ -161,33 +188,11 @@ add_stylesheet('', 0 + + - -
      - 게시물 검색 - -
      - - - - - - - - -
      -
      - -
      -

      +

      + + + + -

      + ?> +

      페이지 정보

      - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 댓글 + 조회 + 작성일 +
      - - - - -
      -

      첨부파일

      - -
      - - - - - - - - - - -
      - - - - - - - -
      - -

      본문

      @@ -154,19 +59,19 @@ add_stylesheet('', 0

      - - + + +
      - 스크랩 - 추천 + 추천 - 비추천 + 비추천 @@ -175,30 +80,128 @@ add_stylesheet('', 0 if($board['bo_use_good'] || $board['bo_use_nogood']) { ?>
      - 추천 - 비추천 + 추천 + 비추천
      - +
      +
      + 스크랩 + + +
      + + $cnt = 0; + if ($view['file']['count']) { + for ($i=0; $i + + + +
      +

      첨부파일

      +
        + +
      • + + + + + () + 회 다운로드 | DATE : +
      • + +
      +
      + + + + + + + + + + +
      + + + + + + + +
        +
      • 이전글
      • +
      • 다음글
      • +
      + + +
      + - -
      - -
      -
      @@ -253,6 +256,19 @@ $(function() { // 이미지 리사이즈 $("#bo_v_atc").viewimageresize(); + + //sns공유 + $(".btn_share").click(function(){ + $("#bo_v_sns").fadeIn(); + + }); + + $(document).mouseup(function (e) { + var container = $("#bo_v_sns"); + if (!container.is(e.target) && container.has(e.target).length === 0){ + container.css("display","none"); + } + }); }); function excute_good(href, $el, $tx) diff --git a/skin/board/basic/view_comment.skin.php b/skin/board/basic/view_comment.skin.php index ad770b070..a372ff01f 100644 --- a/skin/board/basic/view_comment.skin.php +++ b/skin/board/basic/view_comment.skin.php @@ -7,7 +7,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 var char_min = parseInt(); // 최소 var char_max = parseInt(); // 최대 - +

      댓글목록

      @@ -15,8 +15,7 @@ var char_max = parseInt(); // 최대 $cmt_amt = count($list); for ($i=0; $i<$cmt_amt; $i++) { $comment_id = $list[$i]['wr_id']; - $cmt_depth = ""; // 댓글단계 - $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 20; + $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50; $comment = $list[$i]['content']; /* if (strstr($list[$i]['wr_option'], "secret")) { @@ -29,54 +28,52 @@ var char_max = parseInt(); // 최대
      style="margin-left:px;border-top-color:#e0e0e0">
      -

      님의 댓글

      +

      님의 댓글의 댓글

      - 댓글의 댓글 - 아이피 - + 아이피 + () - 작성일 - + 작성일 +
      -

      - 비밀글 - -

      +
      +

      + 비밀글 + +

      + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
      + + " id="secret_comment_"> - - -

      등록된 댓글이 없습니다.

      @@ -89,9 +86,9 @@ var char_max = parseInt(); // 최대 $w = 'c'; ?> -
    - +
    - -
      -
    • -
    • -
    • -
    - -
    + + +
    + 게시물 검색 + +
    + + + + + + + + +
    +
    +
    @@ -155,34 +193,10 @@ add_stylesheet('', 0 + + - - -
    - 게시물 검색 - -
    - - - - - - - - -
    -
    - - -
    -

    +

    + + + + -

    + ?> +

    페이지 정보

    - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 댓글 + 조회 + 작성일 +
    - - - - -
    -

    첨부파일

    - -
    - - - - - - - - - - -
    - - - - - - - -
    - -

    본문

    @@ -154,19 +59,19 @@ add_stylesheet('', 0

    - - + + +
    - 스크랩 - 추천 + 추천 - 비추천 + 비추천 @@ -175,30 +80,128 @@ add_stylesheet('', 0 if($board['bo_use_good'] || $board['bo_use_nogood']) { ?>
    - 추천 - 비추천 + 추천 + 비추천
    - +
    +
    + 스크랩 + + +
    + + $cnt = 0; + if ($view['file']['count']) { + for ($i=0; $i + + + +
    +

    첨부파일

    +
      + +
    • + + + + + () + 회 다운로드 | DATE : +
    • + +
    +
    + + + + + + + + + + +
    + + + + + + + +
      +
    • 이전글
    • +
    • 다음글
    • +
    + + +
    + - -
    - -
    -
    @@ -253,6 +256,19 @@ $(function() { // 이미지 리사이즈 $("#bo_v_atc").viewimageresize(); + + //sns공유 + $(".btn_share").click(function(){ + $("#bo_v_sns").fadeIn(); + + }); + + $(document).mouseup(function (e) { + var container = $("#bo_v_sns"); + if (!container.is(e.target) && container.has(e.target).length === 0){ + container.css("display","none"); + } + }); }); function excute_good(href, $el, $tx) diff --git a/skin/board/gallery/view_comment.skin.php b/skin/board/gallery/view_comment.skin.php index f953e129b..a372ff01f 100644 --- a/skin/board/gallery/view_comment.skin.php +++ b/skin/board/gallery/view_comment.skin.php @@ -7,7 +7,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 var char_min = parseInt(); // 최소 var char_max = parseInt(); // 최대 - +

    댓글목록

    @@ -15,8 +15,7 @@ var char_max = parseInt(); // 최대 $cmt_amt = count($list); for ($i=0; $i<$cmt_amt; $i++) { $comment_id = $list[$i]['wr_id']; - $cmt_depth = ""; // 댓글단계 - $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 20; + $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50; $comment = $list[$i]['content']; /* if (strstr($list[$i]['wr_option'], "secret")) { @@ -29,54 +28,52 @@ var char_max = parseInt(); // 최대
    style="margin-left:px;border-top-color:#e0e0e0">
    -

    님의 댓글

    +

    님의 댓글의 댓글

    - 댓글의 댓글 - 아이피 - + 아이피 + () - 작성일 - + 작성일 +
    -

    - 비밀글 - -

    +
    +

    + 비밀글 + +

    + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
    + + " id="secret_comment_"> - - -

    등록된 댓글이 없습니다.

    @@ -89,9 +86,9 @@ var char_max = parseInt(); // 최대 $w = 'c'; ?> -
    '; + echo ''; ?> @@ -120,6 +125,7 @@ function faq_open(el) if($con.is(":visible")) { $con.slideUp(); + } else { $("#faq_con .con_inner:visible").css("display", "none"); diff --git a/skin/faq/basic/style.css b/skin/faq/basic/style.css index 35168de92..3c3ce0bbb 100644 --- a/skin/faq/basic/style.css +++ b/skin/faq/basic/style.css @@ -1,23 +1,27 @@ @charset "utf-8"; - +#bo_cate {margin:15px 0 10px} #bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#bo_cate ul {margin-bottom:10px;padding-left:1px;zoom:1} +#bo_cate ul {;zoom:1} #bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} -#bo_cate li {float:left;margin-bottom:-1px} -#bo_cate a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:90px;border:1px solid #ddd;background:#f7f7f7;color:#888;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer} -#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none} -#bo_cate #bo_cate_on {z-index:2;border:1px solid #565e60;background:#fff;color:#565e60;font-weight:bold} +#bo_cate li {display:inline-block;} +#bo_cate a {display:block;border:1px solid #dadada;background:#fff;margin:0 0 5px 0;line-height:30px;padding:0 10px;border-radius:3px} +#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#f3f3f3} +#bo_cate #bo_cate_on {z-index:2;border:1px solid #253dbe;color:#253dbe;font-weight:bold} #faq_wrap {margin:10px 0 30px} #faq_wrap h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} .faq_admin {text-align:right} #faq_wrap ol {margin:0;padding:0;list-style:none} -#faq_con {border:1px solid #e9e9e9;border-top:0} -#faq_con h3 a {display:block;padding:10px;border-top:1px solid #e9e9e9;background:#f2f5f9;text-decoration:none} -#faq_con .con_inner {display:none;padding:10px;line-height:1.8em} -#faq_con .con_closer {margin:10px 0 0;text-align:right} -#faq_con .closer_btn {margin:0;padding:0;border:0;background:transparent} -.faq_tolist {padding:0 10px;text-align:right} -.faq_img {text-align:center} +#faq_wrap li{border:1px solid #ddd;background:#fff;margin:5px 0;} +#faq_wrap li h3{min-height:50px;line-height:30px;padding:10px;padding-left:50px;position:relative} +#faq_wrap li h3 .tit_bg{display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#333;color:#fff;border-radius:50%;width:30px;height:30px} +#faq_con .con_inner{display:none;border-top:1px solid #ddd;padding:15px;padding-left:50px;position:relative;background: #f7f7f7;} +#faq_con .con_inner .tit_bg{display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#777;color:#fff;border-radius:50%;width:30px;line-height:30px;height:30px} +#faq_con .con_inner .closer_btn{height:25px;font-size:0.92em;display:inline-block;padding:0 5px;border-radius:5px;} +#faq_con .con_closer{text-align:right} -#faq_sch {text-align:center} \ No newline at end of file +#faq_sch {text-align:center;border:1px solid #ccc;background:#fff;;padding:30px;margin:10px 0} +#faq_sch form{display:inline-block;position:relative} +#faq_sch .sch_tit{font-size:20px;font-weight:bold;display:inline-block;margin-right:10px;vertical-align:middle} +#faq_sch .frm_input{border-color:#646982;border-radius:0;width:300px} +#faq_sch .btn_submit{padding:0 10px;height:40px;color:#000;font-size:1.083em;font-weight:bold;color:#fff;background:#253dbe;} diff --git a/skin/latest/basic/img/icon_file.gif b/skin/latest/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/skin/latest/basic/img/icon_hot.gif b/skin/latest/basic/img/icon_hot.gif index c95b839aeef0c1e26a4bab4ea50cd6d3f1969d7f..2936de662a6035fe711e2ca72f8d35c35fcdd832 100644 GIT binary patch literal 319 zcmZ?wbhEHbEtQ*YwDiOn)&_i-FLfo-m9wo z`|J0u%&d1icYVEm_r>BxZ?|rFGGXHDwQFCm-*CUS=J$v9pH827v1swLIkVqv-S&FT znm60GKA$`H`~63^^YZTG=H0KWebV3eV)0@i<6e3B&6LzPTeklF^XuipMep|=`2YVu z17$$*CkrD3gBF7h$QY2H7}#PQLY*8Z>1a(npuSj&!C+2M$D^Au49rIzmu_NUkbT$K z@N|_DYcbb>j2Wy<#m#{VN6yADE^Oe)_z)w+$e|_7pjN@jAe_d}prOvK#K7Mmz^JUi QD9{kY$HvB2;mBYO0LU4C3IG5A literal 97 zcmZ?wbhEHbe)HzdzkmOpK7G1o&6@rD_kZ~C z0Z6`l`EvdG^($7a`10k;@87>SZ{B?6%9V{9H=a0gV&A@fKwYO#pT2+p{)-ncfKov2 zr%#`N;f!KYsiGiW~)lhIr>|74(23<(<=9yw$9#m#@ra2-+bRv!3%fd0dBQ?f)ODm;T_l^Ed4xq>LVCj3 U#2LJNXZi*?xy@tnaAdFs0Qg;*ivR!s literal 145 zcmZ?wbhEHbzHen|7VvwFnzUPlarEA ZqW~YXyUO~T+#YkUoJ%KCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/skin/latest/basic/img/icon_lock.png b/skin/latest/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; R(%cf16Zrr$W z{rdHjCr{3vJ$vQKmCv3%n>1@!i5WK)~q>x{P^O< zi?3e2x^LgUUAuPu`Sa)6wQGO>{=Iqg=C5DBwt~R}F!=xfKLeG3;!hSv1_pHo9guk- zKQXWs9GJXe!Gr(?hAx*t0V{byl?6c)-Q>=>GF;f9(9+?}ED$k=Bf9zd1Wy$s_Wnkn z84PU88y&a=9iSXMhSSOWmH3xI$C literal 62 zcmZ?wbhEHbC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/skin/latest/basic/img/icon_view.png b/skin/latest/basic/img/icon_view.png new file mode 100644 index 0000000000000000000000000000000000000000..ea76f54424bc4ccedf3334a5c9912725be81c441 GIT binary patch literal 3130 zcmV-A48`+_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004HNklHi{DTb1*jcrauriJho4x(d+gyTuHYJ;;z=4FOos|4v4T1pxR1-Y zjl1ZZxN)4{^3rViZPPR-@vbR&Psj#ZZEyztR zNmQuF&B-gas<2f`Ovz75wF0t1!um=IU?nBlwn~m52?day&iO^D3Z{C-y2%EHh6-k8 zdWI&ZW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{ z<>lpi<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD#PU%0_}#d=^5=_Tjq>Q^Kd=o{)8=;!8w`~_BBToROua0XV@#UYgi zsro^w#rdU0$*Dl)$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsd- z8CzI5I$Ky6n;4k7nj0Eg7+G36y1E&ex|mxUI=Yy^%)qYK%-Pw}#MsE#z|7Fl)!fm| z$;8#g!pXwT#m&UU)eNTBGq1QLF)uk4W^X3gUa(#xyn3yii&7Iy@{2<9^K)P+ARr^Z zB)>Q#zd*q`*i1nqJTosPzr0uz6g?2%x}+9mmZhe+73JqDfWy}+6N~-kmd@rTCdMuX zW=6(ff14PaS~!`TIy##>8X7nmD?#<9kP~M5K*#8V5(iRZfe8UqAczT1`aljm^Q7hh zb4(F1YcT%*_xI25Uq63*|MvCE=T9F$ynpxh&Ffb$Up#;I^vUB#4%#K*!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qXu2*iX zmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2NtnTP2`N zAzsKW@b!fooL8&|_K;q3ey)B+Vu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9lvsNTp{2Q{sk4i#fw7aJnUSH3Im`@fdQD7?&792LoZQS^91RU!%`D7aOr6bK zElfac6JrCIUeCPZlEl2^RG7V)KzpHj9r5b5axO|uEXgkl$G8yO;GeeeCv{0lv$RV;#QQOs{jsPt4u8R8yOlIo0__~IvcoJg8c1d zX5{ARWaemM>E`5WVQHiU)tf?2nCSx@qYp|PNQng|1WbV-COqi_Iq=Mrng`4=MZm1V z`2XMEKfizd{PF$U*Ds$xef;qL-P<>>U%h}$>=IY|?mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#)_>%=lGBW5e00F4vVPN9!;T4~7{8w1F_e~}SYXI*Om>d8A literal 0 HcmV?d00001 diff --git a/skin/latest/basic/latest.skin.php b/skin/latest/basic/latest.skin.php index 989a3ee40..1c1a60698 100644 --- a/skin/latest/basic/latest.skin.php +++ b/skin/latest/basic/latest.skin.php @@ -3,42 +3,51 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 // add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨 add_stylesheet('', 0); +add_javascript('', 10); ?> - -
    - +
    +

    • "; + if ($list[$i]['icon_secret']) echo "비밀글 "; + + if ($list[$i]['icon_new']) echo "N새글"; + + if ($list[$i]['icon_hot']) echo "H인기글"; + + + echo " "; if ($list[$i]['is_notice']) echo "".$list[$i]['subject'].""; else echo $list[$i]['subject']; - if ($list[$i]['comment_cnt']) - echo $list[$i]['comment_cnt']; + echo ""; // if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; } // if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; } - if (isset($list[$i]['icon_new'])) echo " " . $list[$i]['icon_new']; - if (isset($list[$i]['icon_hot'])) echo " " . $list[$i]['icon_hot']; - if (isset($list[$i]['icon_file'])) echo " " . $list[$i]['icon_file']; - if (isset($list[$i]['icon_link'])) echo " " . $list[$i]['icon_link']; - if (isset($list[$i]['icon_secret'])) echo " " . $list[$i]['icon_secret']; - ?> + //echo $list[$i]['icon_reply']." "; + // if ($list[$i]['icon_file']) echo " " ; + //if ($list[$i]['icon_link']) echo " " ; + + if ($list[$i]['comment_cnt']) echo " + + ".$list[$i]['comment_cnt'].""; + + ?> + +
    • -
    • 게시물이 없습니다.
    • +
    • 게시물이 없습니다.
    - + 더보기 +
    - \ No newline at end of file diff --git a/skin/latest/basic/style.css b/skin/latest/basic/style.css index ab55517b1..8fb71ebde 100644 --- a/skin/latest/basic/style.css +++ b/skin/latest/basic/style.css @@ -1,11 +1,26 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 새글 스킨 (latest) */ -.lt_pc {float:left;margin-left:20px} -.lt {position:relative;float:left;margin-bottom:20px;padding-bottom:10px;width:354px;height:150px;border-bottom:1px solid #e9e9e9} -.lt ul {margin:0 0 10px;padding:0;list-style:none} -.lt li {padding:3px 0} -.lt .lt_title {display:block;padding:10px 0 8px} -.lt .lt_more {position:absolute;top:10px;right:0} -.lt .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold} \ No newline at end of file + +.lat {position:relative;margin-bottom:20px;overflow:hidden;border: 1px solid #c6cacc;background:#fff} +.lat .lat_title {display:block;padding:0 20px;line-height:45px;font-size:1.083em;border-bottom:1px solid #e2e2e2;color:#253dbe;background:#fcfcfc} +.lat .lat_title a{color:#253dbe;display:inline-block;position:relative} +.lat .lat_title a:after{position:absolute;bottom:-1px;left:0;width:100%;height:2px;background:#253dbe;content:''} +.lat ul{padding:15px 20px} +.lat li {position:relative;line-height:18px;padding:3px 0;padding-right:50px;padding-left:10px;position:relative} +.lat li:before{position: absolute;top: 12px;left: 0px;width: 4px;height: 4px;background: #aaa;content: '';border-radius: 50%;} +.lat li a:hover{color:#a22121} +.lat li .fa-heart{color:#ff0000;} +.lat li .fa-lock{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce} +.lat li .new_icon{display:inline-block;width: 16px;line-height:16px;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;border-radius: 2px;} +.lat li .hot_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius: 2px;} +.lat li .fa-caret-right{color:#bbb} +.lat .lt_date{position:absolute;top:3px;right:0;color:#888} +.lat .empty_li{line-height:145px ;color:#666;text-align:center;padding:0;} +.lat .empty_li:before{background:none;padding:0} + +.lat .lt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4);} +.lat .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center;} +.lat .lt_more:hover{color:#777} \ No newline at end of file diff --git a/skin/latest/notice/latest.skin.php b/skin/latest/notice/latest.skin.php new file mode 100644 index 000000000..5091d3178 --- /dev/null +++ b/skin/latest/notice/latest.skin.php @@ -0,0 +1,53 @@ +', 0); +add_javascript('', 10); +?> + +
    +

    + + +
    + + + \ No newline at end of file diff --git a/skin/latest/notice/style.css b/skin/latest/notice/style.css new file mode 100644 index 000000000..3867cde8e --- /dev/null +++ b/skin/latest/notice/style.css @@ -0,0 +1,16 @@ +@charset "utf-8"; +/* 새글 스킨 (latest) */ +.notice {position:relative;padding:15px 50px;border-bottom:1px solid #d0d6e4} +.notice li{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} +.notice li a:hover{color:#a22121} +.notice li .lock_icon{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce;vertical-align:top} +.notice li .new_icon{display:inline-block;line-height:16px;width:16px;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;margin-right:3px;border-radius:2px;vertical-align:top} +.notice .cnt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;white-space: nowrap;margin-left:5px; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4)} + +.notice h2{position:absolute;top:50%;left:10px;margin-top:-15px;left:5;line-height:30px} +.notice h2 a{display:inline-block;width:30px;line-height:30px;border-radius:25px;background:#4158d1;color:#fff;text-align:center;color:#fff} +.notice .bx-next{position:absolute;top:50%;right:10px;;width:26px;height:26px;line-height:24px;text-align:center;background:#fff;border:1px solid #d1d1d1;margin-top:-12px} +.notice .bx-prev{position:absolute;top:50%;right:35px;width:26px;height:26px;line-height:24px;text-align:center;background:#fff;border:1px solid #d1d1d1;margin-top:-12px} diff --git a/skin/latest/pic_basic/latest.skin.php b/skin/latest/pic_basic/latest.skin.php new file mode 100644 index 000000000..5b9eb2726 --- /dev/null +++ b/skin/latest/pic_basic/latest.skin.php @@ -0,0 +1,66 @@ +', 0); +$thumb_width = 210; +$thumb_height = 150; +?> + +
    +

    +
      + '; + ?> +
    • + + 비밀글 "; + + if ($list[$i]['icon_new']) echo "N새글"; + + if ($list[$i]['icon_hot']) echo "H인기글"; + + + echo " "; + if ($list[$i]['is_notice']) + echo "".$list[$i]['subject'].""; + else + echo $list[$i]['subject']; + + + + echo ""; + + // if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; } + // if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; } + + //echo $list[$i]['icon_reply']." "; + // if ($list[$i]['icon_file']) echo " " ; + //if ($list[$i]['icon_link']) echo " " ; + + if ($list[$i]['comment_cnt']) echo " + + ".$list[$i]['wr_comment'].""; + + ?> + + +
    • + + +
    • 게시물이 없습니다.
    • + +
    + 더보기 + +
    diff --git a/skin/latest/pic_basic/style.css b/skin/latest/pic_basic/style.css new file mode 100644 index 000000000..9945e8d26 --- /dev/null +++ b/skin/latest/pic_basic/style.css @@ -0,0 +1,24 @@ +@charset "utf-8"; +/* 새글 스킨 (latest) */ +.pic_lt{position:relative;margin-bottom:20px;overflow:hidden;border: 1px solid #c6cacc;background:#fff} +.pic_lt .lat_title {display:block;background:#fcfcfc;padding:0 20px;line-height:45px;font-size:1.083em;border-bottom:1px solid #e2e2e2;color:#253dbe;} +.pic_lt .lat_title a{color:#253dbe;display:inline-block;position:relative} +.pic_lt .lat_title a:after{position:absolute;bottom:-1px;left:0;width:100%;height:2px;background:#253dbe;content:''} +.pic_lt .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center;} +.pic_lt .lt_more:hover{color:#777} +.pic_lt ul:after {display:block;visibility:hidden;clear:both;content:""} +.pic_lt ul{padding:20px 15px } +.pic_lt li{float:left;width:20%;padding:0 10px} +.pic_lt li .lt_img{margin:5px 0;display:block} +.pic_lt li .lt_img img{width:100%;height:auto} +.pic_lt li a:hover{color:#a22121} +.pic_lt li .fa-heart{color:#ff0000;} +.pic_lt li .fa-lock{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce} +.pic_lt li .new_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;border-radius: 2px;} +.pic_lt li .hot_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius: 2px;} +.pic_lt li .fa-caret-right{color:#bbb} +.pic_lt .lt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;white-space: nowrap; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4);} +.pic_lt .lt_date{display:block;margin-top:5px;color: #888;} diff --git a/skin/member/basic/formmail.skin.php b/skin/member/basic/formmail.skin.php index e57be622c..42b5520de 100644 --- a/skin/member/basic/formmail.skin.php +++ b/skin/member/basic/formmail.skin.php @@ -6,70 +6,69 @@ add_stylesheet('', ?> -
    +

    님께 메일보내기

    - + -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    메일쓰기
    형식 +
    +

    메일쓰기

    +
      + +
    • + + +
    • +
    • + + +
    • + +
    • + + +
    • +
    • + 형식 -
    - - 첨부 파일은 누락될 수 있으므로 메일을 보낸 후 파일이 첨부 되었는지 반드시 확인해 주시기 바랍니다. -
    자동등록방지
    + +
  • + + +
  • +
  • +
    + + +
    +
    첨부 파일은 누락될 수 있으므로 메일을 보낸 후 파일이 첨부 되었는지 반드시 확인해 주시기 바랍니다.
    + +
  • +
  • +
    + + +
    +
  • +
  • + 자동등록방지 + +
  • + +
    + + +
    -
    - - -
    diff --git a/skin/member/basic/login.skin.php b/skin/member/basic/login.skin.php index 86772c70d..6bd3c820d 100644 --- a/skin/member/basic/login.skin.php +++ b/skin/member/basic/login.skin.php @@ -14,33 +14,30 @@ add_stylesheet('',
    회원로그인 - - - - + + + +
    + + - - +
    - \ No newline at end of file + diff --git a/skin/member/basic/member_confirm.skin.php b/skin/member/basic/member_confirm.skin.php index 3ea749ba7..457a318b4 100644 --- a/skin/member/basic/member_confirm.skin.php +++ b/skin/member/basic/member_confirm.skin.php @@ -23,20 +23,15 @@ add_stylesheet('',
    - 회원아이디 + 회원아이디 - - - + +
    - -
    - \ No newline at end of file + diff --git a/skin/member/basic/register_form.skin.php b/skin/member/basic/register_form.skin.php index 436bee0e9..c69447e72 100644 --- a/skin/member/basic/register_form.skin.php +++ b/skin/member/basic/register_form.skin.php @@ -6,61 +6,51 @@ add_stylesheet('', ?> -
    - - - - + + + + -
    - - - - - - - - date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400))) { // 닉네임수정일이 지나지 않았다면 ?> - - - - -
    - - - - - - - - - - - - - - - - -
    사이트 이용정보 입력
    - 영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요. - class="frm_input " minlength="3" maxlength="20"> + + + + + + + + + date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400))) { // 닉네임수정일이 지나지 않았다면 ?> + + + +
    +
    +

    사이트 이용정보 입력

    +
      +
    • + + class="frm_input half_input " minlength="3" maxlength="20" placeholder="아이디"> -
    class="frm_input " minlength="3" maxlength="20">
    class="frm_input " minlength="3" maxlength="20">
    + 영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요. + +
  • + + class="frm_input half_input " minlength="3" maxlength="20" placeholder="비밀번호"> + + + class="frm_input half_input right_input " minlength="3" maxlength="20" placeholder="비밀번호 확인"> +
  • +
    - - - - - - - - - - - - - + + 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. + - - - - + + + - - - - - - + +
  • + + class="frm_input full_input " size="70" maxlength="255" placeholder="홈페이지"> +
  • + - - - - - - +
  • + + + + class="frm_input half_input " maxlength="20" placeholder="전화번호"> + - -
  • - - - - + + - - - - - - - -
    개인정보 입력
    - - 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. - - class="frm_input " size="10"> +

    개인정보 입력

    + +
      +
    • + + class="frm_input half_input " size="10" placeholder="이름"> ', else $mb_cert = '휴대폰'; ?> +
      본인확인성인인증 완료
      -
    - - 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    - 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. -
    - - - -
    + + + +
  • + + + + + + + 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    + 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. +
    + +
  • + + +
  • + + @@ -109,160 +104,176 @@ add_stylesheet('', - -
  • class="frm_input " size="70" maxlength="255">
    class="frm_input " maxlength="20">
    - class="frm_input " maxlength="20"> + + + + class="frm_input right_input half_input " maxlength="20" placeholder="휴대폰번호"> -
    - 주소 + + +
  • 필수 -
  • - class="frm_input " size="5" maxlength="6"> + class="frm_input " size="5" maxlength="6" placeholder="우편번호">
    - class="frm_input frm_address " size="50"> -
    - - + class="frm_input frm_address full_input " size="50" placeholder="기본주소"> +
    + +
    - - + + -
    + + + +
    - - - - - - - - - +

    기타 개인설정

    +
      + +
    • + + +
    • + - -
    - - - - + +
  • + + +
  • + - = $config['cf_icon_level']) { ?> - - - - - + + + - - - - + + - - - - - - + +
  • + + + > + 휴대폰 문자메세지를 받겠습니다. + +
  • + - - - - - - - - - - - + + + - - - - - - + - - - - - -
    기타 개인설정
    + = $config['cf_icon_level']) { ?> +
  • + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    - gif만 가능하며 용량 바이트 이하만 등록됩니다. + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다.
    - + 회원아이콘 -
  • + = $config['cf_icon_level'] && $config['cf_member_img_size'] && $config['cf_member_img_width'] && $config['cf_member_img_height']) { ?> +
  • + + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + + 회원아이콘 + + + + +
  • + + +
  • + > 정보 메일을 받겠습니다. -
  • - > - 휴대폰 문자메세지를 받겠습니다. -
    - - 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. - + +
  • + id="reg_mb_open"> 다른분들이 나의 정보를 볼 수 있도록 합니다. -
  • 정보공개 + + 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. + + + +
  • + 정보공개 + 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다.
    - -
  • 자동등록방지
    + +
  • + + +
  • + + +
  • + 자동등록방지 + +
  • +
    - -
    - - 취소 -
    -
    + +
    +
    + 취소 + +
    + -
    \ No newline at end of file diff --git a/skin/member/basic/register_result.skin.php b/skin/member/basic/register_result.skin.php index 1267d20ee..2072485a3 100644 --- a/skin/member/basic/register_result.skin.php +++ b/skin/member/basic/register_result.skin.php @@ -6,13 +6,13 @@ add_stylesheet('', ?> -
    - -

    +

    +

    회원가입이 완료되었습니다.

    +

    님의 회원가입을 진심으로 축하합니다.

    - +

    회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. @@ -38,9 +38,7 @@ add_stylesheet('', 감사합니다.

    - + 메인으로
    \ No newline at end of file diff --git a/skin/member/basic/scrap.skin.php b/skin/member/basic/scrap.skin.php index e89053522..c2a7c52ce 100644 --- a/skin/member/basic/scrap.skin.php +++ b/skin/member/basic/scrap.skin.php @@ -6,41 +6,28 @@ add_stylesheet('', ?> -
    -

    +
    +

    -
    - - - - - - - - - - - - - - - - - - - - - +
    +
    "; ?> - -
    스크랩 목록
    번호게시판제목보관일시삭제
    삭제
    자료가 없습니다.
    + 자료가 없습니다."; ?> +
    - +
    \ No newline at end of file diff --git a/skin/member/basic/scrap_popin.skin.php b/skin/member/basic/scrap_popin.skin.php index 81f82a5a9..ad3ed8b28 100644 --- a/skin/member/basic/scrap_popin.skin.php +++ b/skin/member/basic/scrap_popin.skin.php @@ -6,35 +6,34 @@ add_stylesheet('', ?> -
    +

    스크랩하기

    -
    +
    -
    - - - - - - - - - - - - -
    제목 확인 및 댓글 쓰기
    제목
    -
    +
    +

    제목 확인 및 댓글 쓰기

    +
      +
    • + 제목 + +
    • +
    • + + +
    • +
    +
    -

    - 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. -

    +

    + 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. +

    -
    - +
    + +
    diff --git a/skin/member/basic/style.css b/skin/member/basic/style.css index b86359a68..b3a308714 100644 --- a/skin/member/basic/style.css +++ b/skin/member/basic/style.css @@ -1,5 +1,4 @@ @charset "utf-8"; -/* SIR 지운아빠 */ /* ### 기본 스타일 커스터마이징 시작 ### */ @@ -22,6 +21,7 @@ .mbskin .win_btn input {} .mbskin .win_btn a {} .mbskin .win_btn a:focus, .mbskin .win_btn a:hover {} + /* 게시판용 버튼 */ .mbskin a.btn_b01 {} .mbskin a.btn_b01:focus, .mbskin .btn_b01:hover {} @@ -30,7 +30,30 @@ .mbskin a.btn_admin {} /* 관리자 전용 버튼 */ .mbskin a.btn_admin:focus, .mbskin a.btn_admin:hover {} +/* 기본박스 */ +.mbskin{position: relative;margin:100px auto 0;border:1px solid #ddd;width:400px;background:#fff;text-align:center; +} +.mbskin:before,.mbskin:after{ +content:""; +position:absolute;z-index:-1;top:2%;bottom:0;left:10px;right:10px; +-webkit-box-shadow:0 0 20px rgba(0,0,0,0.8); + -moz-box-shadow:0 0 20px rgba(0,0,0,0.8); + box-shadow:0 0 20px rgba(0,0,0,0.8); +-moz-border-radius:100px / 10px; + border-radius:100px / 10px;} +.mbskin:after{right:10px;left:auto; + -webkit-transform:skew(8deg) rotate(3deg); + -moz-transform:skew(8deg) rotate(3deg); + -ms-transform:skew(8deg) rotate(3deg); + -o-transform:skew(8deg) rotate(3deg); + transform:skew(8deg) rotate(3deg);} +.mbskin .frm_input{width:100%} +.mbskin .btn_submit{width:100%;margin:10px 0 0;height:45px;font-weight:bold;font-size:1.25em} +.mbskin h1{margin: 60px 0 30px;font-size: 2em;} + + /* 기본테이블 */ + .mbskin .tbl_head01 {} .mbskin .tbl_head01 caption {} .mbskin .tbl_head01 thead th {} @@ -82,95 +105,158 @@ /* ### 기본 스타일 커스터마이징 끝 ### */ /* 회원가입 약관 */ -#fregister section {margin:0 0 20px;padding:20px 0} -#fregister h2 {margin:0 0 20px;text-align:center} -#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:98%;height:150px;border:1px solid #e9e9e9;background:#f7f7f7} -#fregister .fregister_agree {padding:10px 0 0;text-align:right} -#fregister .fregister_agree label {display:inline-block;margin-right:5px} -#fregister p {color:#e8180c;text-align:center} -#fregister .btn_confirm {margin-bottom:20px} -#fregister_private .tbl_head01 th{;text-align:center;border:1px solid #d1dee2;width:33%} -#fregister_private .tbl_head01 td {border:1px solid #e9e9e9} -#fregister_private .tbl_head01 caption{position:absolute;font-size:0;line-height:0;overflow:hidden} +#fregister p{text-align:center;color: #c7254e;background: #f9f2f4;padding:10px;border:1px solid #ecc7d2;margin:0 0 5px} +#fregister section {;margin:10px auto 30px;border:1px solid #dbdbdb;position:relative;border-radius:3px 3px 0 0 ; +-webkit-box-shadow: 0 1px 3px #eee; +-moz-box-shadow: 0 1px 3px #eee; +box-shadow: 0 1px 3px #eee; +} +#fregister_chkall{text-align:right} +#fregister h2 {text-align:left;padding:15px 20px;border-bottom:1px solid #dbdbdb;background:#f8f8f8} +#fregister textarea {display:block;padding:20px;width:100%;height:150px;background:#fff;border:0;line-height:1.6em} +#fregister .fregister_agree {position:absolute;top:0;right:0;;padding:15px} +#fregister_private div{padding:20px;background:#fff} +#fregister_private table{width:100%;border-collapse:collapse} +#fregister_private table caption {position:absolute;font-size:0;line-height:0;overflow:hidden} +#fregister_private table th{background:#646982;width:33.33%;color:#fff;padding:10px;border:1px solid #555971} +#fregister_private table td{border:1px solid #ddd;padding:10px;} +#fregister .btn_confirm{text-align:center;} +#fregister .btn_confirm .btn_submit{height:50px;padding:0 40px;font-weight:bold;font-size:1.083em} /* 회원가입 입력 */ -#fregisterform textarea {height:50px} - +#register_form{background:#fff;padding:20px;margin-bottom:20px} #fregisterform #msg_certify {margin:5px 0 0;padding:5px;border:1px solid #dbecff;background:#eaf4ff;text-align:center} - #fregisterform .frm_address {margin:5px 0 0} #fregisterform #mb_addr3 {display:inline-block;margin:5px 0 0;vertical-align:middle} #fregisterform #mb_addr_jibeon {display:block;margin:5px 0 0} +#fregisterform .btn_confirm{text-align:center} +#fregisterform .btn_confirm .btn_submit{height:45px;;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .btn_confirm .btn_cancel{line-height:45px;height:45px;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .frm_info{display:block;color:#3497d9;font-size:0.92em} +#fregisterform .form_01 div{margin: 0 0 50px} +#fregisterform .captcha{display:block;margin:5px 0 0} +#fregisterform .reg_mb_img_file img{max-width:100%;height:auto} + /* 회원가입 완료 */ -#reg_result {padding:50px 0 0} +#reg_result {padding:100px 0 40px;text-align:center;background:#fff} +#reg_result h2{font-size:2em;margin:0 0 20px} +#reg_result h2 strong{color:#ed6478} #reg_result #result_email {margin:20px 0;padding:10px 50px;border-top:1px solid #e9e9e9;border-bottom:1px solid #dde4e9;background:#fff;line-height:2em} #reg_result #result_email span {display:inline-block;width:150px} #reg_result #result_email strong {color:#e8180c;font-size:1.2em} #reg_result p {line-height:1.8em} #reg_result .btn_confirm {margin:50px 0} +#reg_result .reg_result_p{font-size:1.25em;margin:0 0 10px;} +#reg_result .reg_result_p strong{color:#3497d9} +#reg_result .btn_submit{padding: 0 30px;font-weight:bold;height:40px;line-height:40px;display:inline-block;margin:30px 0 0 ;font-size:1.083em} /* 아이디/비밀번호 찾기 */ #find_info #mb_hp_label {display:inline-block;margin-left:10px} -#find_info #info_fs {margin:0 20px 20px;padding:0;background:#fff} -#find_info #info_fs .frm_input {width:70%} -#find_info p {margin:0 0 10px;line-height:1.8em} -#find_info #captcha {margin:0 20px} +#find_info p {line-height:1.5em} +#find_info #mb_email{margin:10px 0;} /* 로그인 */ -#mb_login {margin:0 auto;padding:100px 0;width:500px} -#mb_login h1 {margin:0 0 20px;font-size:1.3em} -#mb_login h2 {margin:0} -#mb_login p {padding:10px 0;line-height:1.5em} -#mb_login #login_fs {position:relative;margin:0;padding:20px 20px 20px 95px;border:1px solid #cfded8;border-bottom:0;background:#fff} -#mb_login #login_fs legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} -#mb_login #login_fs label {letter-spacing:-0.1em} -#mb_login #login_fs .login_id {position:absolute;top:26px;left:95px} -#mb_login #login_fs .login_pw {position:absolute;top:52px;left:95px} -#mb_login #login_fs .frm_input {display:block;margin:0 0 5px 80px;width:162px} -#mb_login #login_fs .btn_submit {position:absolute;top:20px;right:95px;width:60px;height:53px} -#mb_login #login_info {margin:0 0 30px;padding:20px;border:1px solid #cfded8;background:#f5f6fa} -#mb_login #login_info div {text-align:right} +#mb_login {} +#login_fs{padding:0 50px} +#mb_login #login_fs .frm_input{margin:0 0 10px} +#mb_login #login_fs .btn_submit {margin:0 0 20px} +#mb_login #login_info{background:#f6f6f6;padding:25px 10px;border-top:1px solid #e8e8e8;margin:40px 0 0 } +#mb_login #login_info:after {display:block;visibility:hidden;clear:both;content:""} +#mb_login #login_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#mb_login #login_info a{display:inline-block;width:50%;float:left} +#login_password_lost{border-right:1px solid #ddd} + +#mb_login_notmb{margin:30px auto;padding:20px 30px } +#mb_login_notmb h2{font-size:1.25em;margin:20px 0 10px} +#guest_privacy{border:1px solid #ccc;text-align:left;line-height:1.6em;color:#666;background:#fafafa;padding:10px;height:150px;margin:10px 0;overflow-y:auto} +#mb_login_notmb .btn_submit{display:block;text-align:center;line-height:45px} + +#mb_login_od_wr{margin:30px auto;padding:20px 30px } +#mb_login_od_wr h2{font-size:1.25em;margin:20px 0 10px} +#mb_login_od_wr .frm_input{margin:10px 0 0 } +#mb_login_od_wr p{background:#f3f3f3;margin:20px 0 0 ;padding:15px 20px;line-height:1.5em} /* 쪽지 */ -#memo_view_contents {margin:0 auto 20px;width:90%} -#memo_view_contents h1 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#memo_view_ul {margin:0;padding:0 0 10px;border-bottom:1px solid #eee;list-style:none} -.memo_view_li {position:relative;padding:5px 0} -.memo_view_subj {display:inline-block;width:65px} -#memo_view p {padding:10px 0;min-height:150px;height:auto !important;height:150px;background:#fff;line-height:1.8em} +#memo_list .memo_name,#memo_list .memo_name .sv_wrap{font-weight:bold} +#memo_list .memo_datetime{float:right;font-size:0.92em;color:#777;font-style:italic} +#memo_list .memo_del{margin-left: 5px; color: #49857c;font-size: 15px;} + +#memo_view_contents {margin:10px 0;border:1px solid #ddd;} +#memo_view_contents h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#memo_view_ul {margin:0;border-bottom:1px solid #eee;list-style:none;background:#f3f3f3;} +#memo_view_ul:after {display:block;visibility:hidden;clear:both;content:""} +.memo_view_li {position:relative;padding:10px;float:left;width:50%;} +.memo_view_name strong,.memo_view_name .sv_wrap{font-weight:bold !important} +.memo_view_subj{display: inline-block;height: 20px;line-height: 18px;border: 1px solid #3497d9;color: #3497d9;padding: 0 5px;border-radius: 15px;font-size: 11px;} +.memo_view_li .profile_img img{border-radius:50%} +.memo_view_date{text-align:right;color:#555;font-style:italic} +.memo_view_date strong{font-weight:normal} +#memo_view .btn_b02{float:right} +#memo_view p {padding:10px;border-top:1px solid #ddd;min-height:150px;height:auto !important;height:150px;background:#fff;line-height:1.8em} #memo_write textarea {height:100px} /* 스크랩 */ +#scrap .scrap_tit{font-weight:bold;display:block;font-size:1.083em;margin-bottom:5px;line-height:1.3em} +#scrap .scrap_cate{ display:block;color:#3598db ;font-size:0.92em;float:left} +#scrap .scrap_datetime{;color:#777;font-style:italic;float:right} +#scrap .scrap_del{position:absolute;top:5px;right:10px;font-size:18px;color:#49857c} +#scrap .scrap_del:hover{color:#98ca69} #scrap_do table {margin:0 0 10px;width:100%} #scrap_do textarea {height:100px} +#scrap_do .scrap_tit{background:#f3f3f3;padding:10px 15px;font-size:1.083em;font-weight:bold} +#scrap_do label{display:block;margin:0 0 5px;font-size:0.92em} +/*포인트*/ +#point .point_top{line-height:15px;margin:0 0 5px} +#point .point_top:after {display:block;visibility:hidden;clear:both;content:""} +#point .point_tit{font-weight:bold;float:left;font-size:1.083em;display:block;} +#point .point_num{font-size:1.25em;color:#00c4ac;font-weight:bold;float:right;} +#point .point_date1{float:left;color:#555;font-style:italic} +#point .point_date{float:right;color:#555;font-style:italic} +#point .txt_expired {color:#aaa;} +#point .point_all{background:#ae99da;border:0;border-bottom:2px solid #9781c5;color:#fff;font-weight:bold;font-size:1.083em} +#point .point_all span,#point .point_status span{float:right;} +#point .point_status{background:#737373;border:0;color:#fff;font-weight:bold;font-size:1.083em} +#point .point_status span{margin-left:10px} /* 회원 비밀번호 확인 */ -#mb_confirm {margin:0 auto;padding:100px 0;width:500px} -#mb_confirm h1 {margin:0 0 20px;font-size:1.3em} -#mb_confirm p {padding:20px;border:1px solid #dde4e9;border-bottom:0;background:#fff} -#mb_confirm p strong {display:block} -#mb_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #e9e9e9;background:#f5f6fa;text-align:center} +#mb_confirm {} +#mb_confirm h1 {margin:60px 0 30px;font-size:2em} +#mb_confirm p {padding:0 20px 40px;border-bottom:1px solid #e9e9e9;font-size:1.083em;line-height:1.4em;color:#656565} +#mb_confirm p strong {display:block;color:#3ca1ff;font-size:1.167em;margin:0 0 5px} +#mb_confirm fieldset {;padding:50px;text-align:left} #mb_confirm fieldset .frm_input {background-color:#fff !important} #mb_confirm label {letter-spacing:-0.1em} -#mb_confirm_id {display:inline-block;margin-right:20px;font-weight:bold} +#mb_confirm_id {display:block;margin:5px 0 10px;font-weight:bold} +#mb_confirm .confirm_id{font-size:0.92em;color:#666} /* 비밀글 비밀번호 확인 */ -#pw_confirm {margin:0 auto;padding:100px 0;width:500px} -#pw_confirm h1 {margin:0 0 20px;font-size:1.3em} -#pw_confirm p {padding:20px;border:1px solid #dde4e9;border-bottom:0;background:#fff} -#pw_confirm p strong {display:block} -#pw_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #e9e9e9;background:#f5f6fa;text-align:center} +#pw_confirm h1 {margin:60px 20px 30px;font-size:2em} +#pw_confirm p {padding:0 20px 40px;border-bottom:1px solid #e9e9e9;font-size:1.083em;line-height:1.4em;color:#656565} +#pw_confirm p strong {display:block;color:#3ca1ff;font-size:1.167em;margin:0 0 5px} +#pw_confirm fieldset {;padding:50px;text-align:center} #pw_confirm fieldset .frm_input {background-color:#fff !important} #pw_confirm label {letter-spacing:-0.1em} #pw_confirm_id {display:inline-block;margin-right:20px;font-weight:bold} +#mb_confirm_id{} /* 폼메일 */ -#formmail #subject {width:386px} #formmail textarea {height:100px} +#formmail .formmail_flie{position:relative} +#formmail .formmail_flie .file_wr {border: 1px solid #ccc;background: #fff;color: #000;vertical-align: middle;border-radius: 3px;padding: 5px;height: 40px;margin: 0;} +#formmail .lb_icon {position: absolute;top: 1px;left: 1px;border-radius: 3px 0 0 3px;height: 38px;line-height: 38px;width: 40px;background: #eee;text-align: center;color: #888;} +#formmail .frm_file {padding-left: 50px;} +#formmail .frm_info{color: #3497d9;font-size: 0.92em;} /* 자기소개 */ +#profile h1 a{color:#fff} #profile table {margin-bottom:0} -#profile section {margin:0 auto 20px;padding:20px;width:86%} -#profile h2 {margin:0} \ No newline at end of file +#profile table th{text-align:left;padding:10px;width:100px} +#profile section {color: #2d4c7b;background: #eff9f9;padding: 10px;border: 1px solid #bfd4dc;margin: 10px 0;} +#profile h2 {margin:0 0 5px} +#profile .profile_name{text-align:center;font-weight:bold} +#profile .my_profile_img{display:block;margin:20px 0 5px;} +#profile .my_profile_img img{border-radius:50%;border:1px solid #aaa} +#profile .profile_img img{border-radius:50%} +#profile .profile_name .sv_wrap{font-weight:bold;text-align:left} \ No newline at end of file diff --git a/skin/new/basic/new.skin.php b/skin/new/basic/new.skin.php index 2558d8118..9401f2b50 100644 --- a/skin/new/basic/new.skin.php +++ b/skin/new/basic/new.skin.php @@ -22,8 +22,8 @@ add_stylesheet('', 0);
    - - 목록 + 목록 + +
    diff --git a/skin/search/basic/search.skin.php b/skin/search/basic/search.skin.php index e341efa3f..c6386f500 100644 --- a/skin/search/basic/search.skin.php +++ b/skin/search/basic/search.skin.php @@ -23,8 +23,10 @@ add_stylesheet('', - - + + + + - id="sop_or" name="sop"> - - id="sop_and" name="sop"> - + + id="sop_or" name="sop"> + + id="sop_and" name="sop"> + + @@ -68,7 +72,7 @@ add_stylesheet('', if ($board_count) { ?>
    -

    전체검색 결과

    +

    전체검색 결과

    게시판
    @@ -109,7 +113,7 @@ add_stylesheet('', for ($i=0; $i', ?>
  • - - 새창 +
    + + 새창 +

    - - +
    + + +
  • - +
    diff --git a/skin/search/basic/style.css b/skin/search/basic/style.css index 8adf23a45..94d01dc26 100644 --- a/skin/search/basic/style.css +++ b/skin/search/basic/style.css @@ -1,29 +1,53 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 전체검색결과 스킨 */ -#sch_res_detail {padding:0 0 10px;border-bottom:1px solid #e9e9e9;text-align:center} +#sch_res_detail {background:#fff;padding:30px;border:1px solid #ccc;text-align:center;margin:0 0 10px} #sch_res_detail legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} -#sch_res_ov {margin:0 0 10px;padding:10px;border-bottom:1px solid #e9e9e9;background:#f5f6fa;zoom:1} +#sch_res_detail select{border:1px solid #646982;height:40px;padding:0 5px} +#sch_res_detail .frm_input{border:1px solid #646982;border-radius:0;} +#sch_res_detail .sch_wr{position:relative;display:inline-block} +#sch_res_detail .btn_submit{padding:0 10px;height:40px;color:#000;font-size:1.083em;font-weight:bold;color:#fff;background:#253dbe} +#sch_res_detail .sch_rd{display:block;margin:5px 0 0;font-size:0.92em;color:#666} + +#sch_res_ov {text-align:center;zoom:1} #sch_res_ov:after {display:block;visibility:hidden;clear:both;content:""} -#sch_res_ov h2 {float:left} -#sch_res_ov dl {float:left;margin:0 0 0 10px} +#sch_res_ov h2 {text-align:center;margin:30px 0 10px;font-size:1.5em;} +#sch_res_ov h2 strong{color:#00c4ac;} +#sch_res_ov dl {display:inline-block;line-height: 30px;font-size: 0.92em;color: #4e546f;background: #d4d4d4;padding: 0 10px;border-radius: 5px;} +#sch_res_ov dl:after {display:block;visibility:hidden;clear:both;content:""} #sch_res_ov dt {float:left} #sch_res_ov dd {float:left;margin:0 10px 0 5px} -#sch_res_ov p {float:right;margin:0;padding:0;line-height:1em} +#sch_res_ov dd .sch_word{color:#000} +#sch_res_ov p {margin:0;padding:0;line-height:1em;color:#777;font-size:0.92em} + + +#sch_res_board {background:#ecf2f3;padding:7px;margin:10px 0;border:1px solid #bed1d4} +#sch_res_board h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#sch_res_board ul {zoom:1} +#sch_res_board ul:after {display:block;visibility:hidden;clear:both;content:""} +#sch_res_board li {display:inline-block;padding:2px;} +#sch_res_board a {display:block;line-height:26px;padding:0 10px;border-radius:3px;border:1px solid transparent} +#sch_res_board a:focus, #sch_res_board a:hover {text-decoration:none;background:#d2d6dc;} +#sch_res_board .cnt_cmt {font-weight:normal !important;display:inline-block;background:#c4dce0;margin-left:3px;color:#3497d9;border-radius:15px;height:18px;padding:0 5px;line-height:18px;font-size:0.92em} +#sch_res_board .sch_on {z-index:2;background:#3497d9;color:#fff;font-weight:bold;border-bottom-color:#1977b5; +-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202); +-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202); +box-shadow:inset 0 2px 5px rgb(33, 135, 202);} +#sch_res_board .sch_on:hover{;background:#3497d9;color:#fff;} + + -#sch_res_board {margin:0 0 10px;padding-left:1px;list-style:none;zoom:1} -#sch_res_board:after {display:block;visibility:hidden;clear:both;content:""} -#sch_res_board li {float:left;margin-bottom:-1px} -#sch_res_board a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:180px;border:1px solid #ddd;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer} -#sch_res_board a:focus, #sch_res_board a:hover, #sch_res_board a:active {text-decoration:none} -#sch_res_board .cnt_cmt {font-weight:normal !important} .sch_res_list {margin:0 0 10px;padding:10px 0 15px} -.sch_res_list h2 {margin:0 0 15px;font-size:1.2em} -.sch_res_list ul {margin:0;padding:0;list-style:none} -.sch_res_list li {margin:0 0 10px;padding:0 0 10px;border-bottom:1px solid #e9e9e9} +.sch_res_list h2 {margin:0 0 10px;font-size:1.2em} +.sch_res_list ul {margin:0;padding:0;list-style:none;border-top:1px solid #000} +.sch_res_list li {;border-bottom:1px solid #e0e0e0;background:#fff;position:relative} +.sch_res_list .sch_tit{display:block;background:#f4f4f4;padding:10px 70px 10px 10px} +.sch_res_list .pop_a{position:absolute;top:10px;right:10px;color:#666;} .sch_res_title {display:inline-block;margin:0 0 5px} -.sch_res_list p {margin:0 0 10px;line-height:1.8em} -.sch_more {text-align:right} -.sch_on {color:#ff3061} \ No newline at end of file +.sch_res_list p {padding:10px;color:#666;line-height:1.5em} +.sch_res_list .sch_info{padding:10px;color:#777} +.sch_res_list .sch_info:after {display:block;visibility:hidden;clear:both;content:""} +.sch_res_list .profile_img img{border-radius:50%} +.sch_res_list .sch_datetime{float:right;} +.sch_more {text-align:right;margin:10px 0 30px} +.sch_more a{display:inline-block;color:#f2664f} diff --git a/skin/social/img/btn_p.jpg b/skin/social/img/btn_p.jpg new file mode 100644 index 0000000000000000000000000000000000000000..854640b55a994b52bd1fc088ca161df6ba232271 GIT binary patch literal 22909 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 BsOkU! literal 0 HcmV?d00001 diff --git a/skin/social/img/login_id.jpg b/skin/social/img/login_id.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42b9ae47caa8545c0e739ba66de5b93ce91c4266 GIT binary patch literal 466 zcmex=iF;o{=v;^GnD0RsUZK7IjyJ|1CV5fNcw z8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe}F-dgF&1@oS9LOfk}{&S&;Gn5r!lN zMj!yX5)OclKnGt9qvmk>#!%MrjcjKm;1SB4x`zNW2moe_O{jXo!Tz)QHRKl55UY)b()m!_W z*=g&}cXIjtXRu|w8G7sIw`+`MracV5<}zPPzWXnJJIAu~KKcS>6BnFabn|>y^Er;b zeQYJX-*sF!D@1k|EsMBuO@ht3iF;o{=v;^GnD0RsUZK7IjyJ|1CV5fNcw z8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe}F-dgF&1@oS9LOfk}{&S&;Gn5r%XI z1}0{pBN2dwm6?r$kr5#PVF@rWF)}kTvvR^@7@3#_g;*F^4IPCQ0~c--`H)!HsN|HS zY^*8>Qvx^R|1Aa{W=5c`%z_N|4416;y;Slje30$+pTS)w`;H0sESahO>#wpN2v6n9 z=eooB;rV%oG`Y9NjwVJM^)DBT%y}g;E8M|Y{ns}S?Z~5!4;*Wmw;o>?({;i1<(ufJ z^DF+TPfy(!#dV5Jt@~KZp9Ym58FKF`3eFns30A30ni6zCsP2Ak^%llovEN?jO@4gk e&F2gL?XA6XHuv|bpQyOOWw5A;f1?%u|C<0LA9ZN} literal 0 HcmV?d00001 diff --git a/skin/social/img/plus_minus.png b/skin/social/img/plus_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..62f41eb17226256d5991c8e40214e4a7e72cc41e GIT binary patch literal 2863 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 Hr-UW|{lY%= literal 0 HcmV?d00001 diff --git a/skin/social/img/sns_kakao_s.png b/skin/social/img/sns_kakao_s.png new file mode 100644 index 0000000000000000000000000000000000000000..09f0a4aba944ecca89b8c6ab16c7fcd5942d70a1 GIT binary patch literal 2104 zcmbVNeK=J49v>;&Dol)*tTcB_!kTw8%w%X@Ys!e3!B~lTIhbKy%p7J=Y~3x8FgN<5=EExciQXo;GrlV$>FQJeMIUN;6 z=HvNV7LcUaoT&qZnV}+CX0nVbM+FBV1C2CDKm~vjq*0Zk*3*o1)LUH|G&gVKP{_9s zFqw{e=aiTqhGc1U0FsO)VPtp$0ZE}?34UY>h2V=M;t50?9=a(Qf**}cp%ML&?=KW& zO(##F3E15CwxAUql>~xX8V+YL7_bHsR-;SA5vWwES%XN#KnRRJLk&ud7`5JGQGpHU zWjcixRA|&lv!X<*NdxI9$kTTrsI+|k2Vu4TeWIY0;fxY3j)2AER4Q{^Z_#>C0Q}dD zkD~RW3@v~Y0D4WDP6nMvg2y5m%H1CuG6NxRXxnrO=ujjnY>g~U1*kzDn~s9MVC4!q z&7VkRk(n$!$B*U5@h1=%Y$BIK2=K#m30yphNLtkR7?;Q)6YxZTD$9?{AP_kI3?_xc z;1XCI5{JrQvY3lpo>~t|)G}bvt^%_Ao*VFoTpCLUNI;EFq|u}-RzO&i2Gr=2G+HD} zNI`lDP94sOSIc^G5ixbTs&7$UHKT5^UgE*Sf@?6JeaGF7y$~ZkZ&-Ael>SMO z=EPjt0DswW91)|pFf9q&F&9g=^W{7%E5@C)$ZQS9hRAsX7C-1wN zyVHd_({{AV$3As%T@Lcl?`ckypwiB&dxfT60m^FO@b_BZi)X{gafq|rgzTv>_$Iqg zQZquTLa0Axy5C^VdPXSZ2%;BDD06Cl(Rt?izf0vxWvXfPa%G(3?ddGTS6V6lOS1cl zh`tLsnUVjX|LkEK^1UeV{;Devg++xoACF%2u2nXrw0(Xv@?lpz+$PB3NRdZ*LRZ4- zi3u0CYnOhrwm2?W=~zr1iv5m*>!xnhtKtnO91k=r9}Ich(VCx_!ji4?L(%XR){Z-8 z^Q|M$62j8JjPc0}0P*~Gw>x)iV}!-+*Z0POzaA~yc+XZK9p~0Lo*wW%5p@62`lrN{ zZ1i54rKHToR<^Kj<&J^ig4Z`aO%8&k;e>WS=U zb=w-dqpka}C*unxJBRW-Pv=$me{NcccFvv?T34IQ_e_A=Hl7b@E!G8N>tX;@V>a{|LQ??v&Q7axXpBl}2HG!B;>E07QLTg(8 zm;F?@y8%uLmDh|&YvJO66U@Ynn6Db)Tc4#KDg89H*S~b`>H6~JV?FoX(q^6dd!t>} z=tqA(NjrEmB3^Zs;+B@r>JWvhv;w_8&>*+1NXS|Q52OVyI zED3h?@pXHHT;3F8{Oj1fzj`~b#yI~F4VI4$7eoi_FK^0=EaP7FxLs=-dq@%AYWVZ7_^p+n9iZO2Rl%OQOs?61 zJvDxQ5JN)ejAZR{JouZH2XM6 literal 0 HcmV?d00001 diff --git a/skin/social/img/sns_logo.png b/skin/social/img/sns_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..958bb5788a999033931860f3ae9bab13931d9104 GIT binary patch literal 6045 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 XSy;i`Jew{v00000NkvXXu0mjf(et`f literal 0 HcmV?d00001 diff --git a/skin/social/img/sns_logo_not.png b/skin/social/img/sns_logo_not.png new file mode 100644 index 0000000000000000000000000000000000000000..04308576c99623fd23f63b21a2a1f42cd913978d GIT binary patch literal 5465 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 P00000NkvXXu0mjfe$r_B literal 0 HcmV?d00001 diff --git a/skin/social/img/sns_naver_s.png b/skin/social/img/sns_naver_s.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea7a5b191043660818df6f2ef2db9489a08d071 GIT binary patch literal 1571 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}#MrL(D% zvw^FLvx%#@p`oLTk(;Zbg^7Wip__rRkul5+Y(9`B4F0Axai}^z`zvj>EaktaqCT( zZ?ftNUQHw*k(;lXn7-IDqP-}psbTsEv@St-wbFjVm6s#3+fzcxcYfd7Tki6S z)r#Sc(yva1S=nYETXrmKc_*~|!F*YjZyZ%`KDagS54#Yhu_r*|AF*qANR^)d-gKf za@8#T@bd_V-`#$1?0a~%NbK>=*Z;UyuTqKN(?8p9 zRB!x`Gu)y_VEvf|mtQs>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}#MrL(D% zvw^FLvx%#@p`oLTk(;Zbg^7Wip__rRkul5+Y`gLD2*8txIZAW?5>ATTyO0Qv}Q!=Enb@GB7Y^c)B=-RNPA1 zbN;Nti30~Na31;QaORLh^au8ia^^zT6N_9O-W+zYU%+sON#9KbNql&_&Y-mvu(x(A3se@G1RdBtM0b&(DQnSt34J^ z>+kP4_TkRWSr6|Y=MUk_TCw#1{<_p3g-;YD{_iVi*E_pv;ZcQvNcY_qY?0p%9cJvA z|7xYto<45(6uv#*d$qGisMycRO>2 z$L9}|z*(*?o;5iK#9B z_Vx?sj{mo-Px?_=zB&KcU1g^8rla+8chW0F1r3C>I{#0Y^!5My z`(L*HIQ{5ng7{l$Y$ h0j+z*I)WLPco=+aE8e~qj1>ZvWuC5nF6*2Ung9>};`RUl literal 0 HcmV?d00001 diff --git a/skin/social/img/sns_twitter_s.png b/skin/social/img/sns_twitter_s.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5fe153dcf68611cd74684238876265a6ed6dc6 GIT binary patch literal 1736 zcmbVNc~BE~6b?`#1+hh>DuT0(T8l!G&7FlHAqPYVX9PT8h{=YekZjm2BtWZ0p^6p6 z3shhP6sd!tD2O8nI4Fv84cfw>ATwBP6%AF=ka(q~fiDIxwM1>jUC`{lhkqvMgxjV&ZVqvVmI znNq4$FM!pWz;qOjOb?MM(i0V2C25T>;A4Vt0xgWm0h2aKXMjvR(iAU*&n?>&5-??g zCGtqqPQ^&W00Dx+0FzAjQcytf;MkCosCnIPA1>|zM77iNC3%Bqxr0FoZ$xCNgHp?J{4GL7F z$25ozurSIuBPketk;z9-fhW)g*`jAD}ODIl3j(P}MmO<5bT2>2g2K4@)_ zrRiZx1Z+T3Pz8P-s%5iaJa-=#vKZptK%uAxKNNYA5K*LPVI3wB@<{j>vQndj*fg$y z=`Wy)7y^cf4T5|jO)LUA45}CuQ|UDNEXRki3@(G_FJ$orOe!A)MQpx^$>gxPAdN=n zvi%w0ELNg3U~-)Tp4HXhx-(c@{3BRMfWmSNL1hS%G+O~-Y6L?JYD5nRB3Z!K(Hfl+ zF&aE9$1@$R5Jokruu_a7T3{-_kmdvWAcMmI*;Kli^IvgKW0n6WXB6BSilsRIRV=ex zcm-Of?@J$Fyl);@hj$E$w+3TysFgsl{!=34%S?k~1)+fpb(bT=Fkx8;7L(*8ue_Izab`KI&IgB5( zdDBv((U;nfn3$!*5aG=R|DGKV_bZ+?XYa|l*{#iwi?X*T3h0hj0a{yP+7@Uu{aVLP zKgj&7$&X{VAPqYBc^tL*@_8G#^0uqYY|_c71LM*FEC0%Z*iCAdzJa&Rx%kH6bql{6 zWzj_0FMj~yf)_eDe7ZIM>QGlg?A+8N!{(Yy&jM{`!64y9`>iT$c+r)>!kpF<=JQHI zVI;ASoBfAvPTBg7`2?^nAoo)4$y_W}%cS-m^b2w{*8euL+IS>kS4NL$i(t|-biW6+ zXx)+uC*PtV@7|Gjp(1lk+seko@$m?^=)4{A$;PPTb^V{Mal5;CqoBYebdhi3sqNK@ z`_4gR-_sX39j@&IjE0^p-pzp#^23;Za;H-|Bm8^WJJp+srqQ3H#-jZ4Zrknd4!rByeQy2TU8U(y=QIb#oEW%- zdYtu_XKK0=R)rsKow(FcdmuSJ`<3+xch&u4&*$@&rOoZ)UVoDRs*Ia6XF2mK|$OhIT)${<0XcFKBwb zGGQG%-n{XSL*3!Ut1f1k0<*5ydKk@p^YYqllf>bn)p@nI`Z>k)1D))9D~OfLze>gQJEz;-hR5{AIY)dS&6}C{s3hQf+*n`50@7imUa_b)*`u5_X zf^paC>o0;<1!biV20Knx+`93wc+&YVBk_fSHTF1s>v(s)yJuBv*Ei#8m)6sa3q>zC lJ#P0UXa^$)yHc!(gkM8lCVuhqv9kPIB%%;ujeq>MzX1}Spt}G7 literal 0 HcmV?d00001 diff --git a/skin/social/index.php b/skin/social/index.php new file mode 100644 index 000000000..e69de29bb diff --git a/skin/social/social_login.skin.php b/skin/social/social_login.skin.php new file mode 100644 index 000000000..02ae62f9a --- /dev/null +++ b/skin/social/social_login.skin.php @@ -0,0 +1,85 @@ +', 10); +?> + + \ No newline at end of file diff --git a/skin/social/social_outlogin.skin.1.php b/skin/social/social_outlogin.skin.1.php new file mode 100644 index 000000000..43260475d --- /dev/null +++ b/skin/social/social_outlogin.skin.1.php @@ -0,0 +1,85 @@ +', 10); +?> + + \ No newline at end of file diff --git a/skin/social/social_register.skin.php b/skin/social/social_register.skin.php new file mode 100644 index 000000000..b15d87064 --- /dev/null +++ b/skin/social/social_register.skin.php @@ -0,0 +1,88 @@ +', 10); +?> +
    + + +
    \ No newline at end of file diff --git a/skin/social/social_register_member.skin.php b/skin/social/social_register_member.skin.php new file mode 100644 index 000000000..ccd41f476 --- /dev/null +++ b/skin/social/social_register_member.skin.php @@ -0,0 +1,192 @@ +', 11); +add_stylesheet('', 12); +add_stylesheet('', 13); +add_javascript('', 10); + +$email_msg = $is_exists_email ? '등록할 이메일이 중복되었습니다.다른 이메일을 입력해 주세요.' : ''; +?> + + +
    + + + + +
    + + + + + + + + + + +
    +
    + 자세히보기 + +
    +
    +

    +
    +
    +
    +
    + 자세히보기 + +
    +
    +

    +
    +
    +
    + +
    + +
    + + + + + + + + + +
    개인정보 입력
    + + +
    +
    + +
    + + 취소 +
    +
    + + + + +
    +

    혹시 기존 회원이신가요?

    + +
    + + + + + +
    + \ No newline at end of file diff --git a/skin/social/social_u_register_form.skin.php b/skin/social/social_u_register_form.skin.php new file mode 100644 index 000000000..29d8f6aca --- /dev/null +++ b/skin/social/social_u_register_form.skin.php @@ -0,0 +1,163 @@ +', 10); +?> + +
  • + +
    +
    + + $provider_name ){ + + if( !option_array_checked($social, $config['cf_social_servicelist'])) { + continue; + } + + $social_nonce = social_nonce_create($social, $session_id); + $add_class=''; + $title=''; + if( in_array($social, $my_provides) ){ + + $link_href = G5_SOCIAL_LOGIN_URL.'/unlink.php?provider='.$social.'&social_nonce='.$social_nonce; + + $title = $provider_name.' 연결을 해제합니다.'; + } else { + $add_class = ' sns-icon-not'; + + $link_href = $self_url.'?provider='.$social.'&mylink=1&url='.$urlencode; + + $title = $provider_name.' 계정을 연결 합니다.'; + + } + ?> + + + + + +
    +
    +
  • + + \ No newline at end of file diff --git a/skin/social/style.css b/skin/social/style.css new file mode 100644 index 000000000..9a2e71964 --- /dev/null +++ b/skin/social/style.css @@ -0,0 +1,148 @@ +@charset "utf-8"; + +.social_info_guide{background:#f3f3f3;border:1px solid #ddd;margin:0 10px 10px;padding:10px 15px;line-height:1.5em} +.bg-warning{margin:0 10px 10px;padding:10px 15px;line-height:1.5em} +.bg-warning1{background:#f7dfe4;border:1px solid #eac3cb} +.bg-warning2{background:#deeabf;border:1px solid #bde498} +.bg-warning3{background:#fff8dc;border:1px solid #f1e4b2} + +/* SNS LOGIN */ +.login-sns{padding-bottom:10px;margin-top:5px;border: 1px solid #d2d9e6;border-bottom: 1px solid #c1ccda;clear:both;background:#fff;} +.login-sns h3{padding-top:10px;text-align:center;color:#777;font-weight:normal} +.sns-wrap {margin:10px 0 0;text-align:center} +.sns-icon {display:inline-block;vertical-align:middle;text-decoration:none} +.sns-icon:hover {text-decoration:none} +.sns-icon .ico {display:block;vertical-align:middle} +/*.sns-icon .txt {position:absolute;line-height:0;font-size:0;vertical-align:middle;overflow:hidden}*/ +.sns-icon .txt i {font-style:normal} + +#fregisterform .form_01 .reg-form {margin-bottom:20px} +#fregisterform .form_01 .reg-form .sns-wrap {margin:10px 0 0;text-align:left} +.reg-form .sns-icon {display:inline-block;vertical-align:middle;text-decoration:none;border-width:1px;border-style:solid;overflow:hidden;margin:0 1px} +.reg-form .sns-icon:hover {text-decoration:none} +.reg-form .sns-icon .ico {display:block;background:url('./img/sns_logo.png') no-repeat;vertical-align:middle;width:24px;height:24px} +.reg-form .sns-icon-not .ico {display:block;background:url('./img/sns_logo_not.png') no-repeat;vertical-align:middle} +.reg-form .sns-icon .txt {position:absolute;line-height:0;font-size:0;vertical-align:middle;overflow:hidden} +.reg-form .sns-icon .txt i {font-style:normal} + +.sns-wrap-reg .sns-naver {border-color:#18a400;background:#2db400} +.sns-wrap-reg .sns-naver .ico {background-position:-29px 0; } +.sns-wrap-reg .sns-google {border-color:#ca2c19;background:#dd5443} +.sns-wrap-reg .sns-google .ico {background-position:-58px 0} +.sns-wrap-reg .sns-facebook {border-color:#2e5393;background:#3a5897} +.sns-wrap-reg .sns-facebook .ico {background-position:0 0 } + +.sns-wrap-reg .sns-icon {border-color:#dcdcdc} +.sns-wrap-reg .sns-icon-not {border-color:#8b8b8b} +.sns-wrap-reg .sns-naver{border-color:#18a400} +.sns-wrap-reg .sns-naver .ico {background-position:-29px 0; } +.sns-wrap-reg .sns-google .ico {background-position:-58px 0} +.sns-wrap-reg .sns-google {border-color:#ca2c19} +.sns-wrap-reg .sns-facebook .ico {background-position:0 0 } +.sns-wrap-reg .sns-facebook {border-color:#2e5393} +.sns-wrap-reg .sns-kakao .ico {background-position:-87px 0} +.sns-wrap-reg .sns-twitter {border-color:#488FC9} +.sns-wrap-reg .sns-twitter .ico {background-position:-145px 0} +.sns-wrap-reg .sns-payco {border-color:#C44646} +.sns-wrap-reg .sns-payco .ico {background-position:-116px 0} +.sns-wrap-reg .sns-kakao {border-color:#f2df00} + +/* SNS by COLOR */ +.sns-wrap-over .sns-naver{background:url('./img/sns_naver_s.png') no-repeat} +.sns-wrap-over .sns-google {background:url('./img/sns_gp_s.png') no-repeat} +.sns-wrap-over .sns-facebook {background:url('./img/sns_fb_s.png') no-repeat} +.sns-wrap-over .sns-twitter {background:url('./img/sns_twitter_s.png') no-repeat} +.sns-wrap-over .sns-payco {background:url('./img/sns_payco_s.png') no-repeat} +.sns-wrap-over .sns-kakao {background:url('./img/sns_kakao_s.png') no-repeat} +.reg-form .sns-icon-not {border-color:#8b8b8b} + +.social-login-loading{width:100%;height:auto;text-align:center} +.social-login-loading p{display:inline-block;margin-top:10px;padding:40px 0 0;line-height:30px} + +/* 아웃로그인 */ +#sns_outlogin .sns-icon {overflow:hidden;margin:0 1px} +#sns_outlogin .sns-icon .txt {position:absolute;line-height:0;font-size:0;vertical-align:middle;overflow:hidden} +#sns_outlogin .sns-icon .ico {width:30px;height:30px} + +/*로그인 */ +#sns_login{border:0;margin-top:15px ;padding: 20px 50px 0;border-top:1px solid #edeaea} +#sns_login h3{;padding:10px 0 0;text-align:left;font-weight:bold} +#sns_login .sns-icon{display:block;height:40px;line-height:40px;width:100%;margin:0 0 5px;padding-left:40px;text-align:left;color:#fff;border-radius:2px} +#sns_login .sns-naver{background-color:#1fc800;background-position:5px 5px;border-bottom:1px solid #1ea505} +#sns_login .sns-kakao{background-color:#ffeb00;background-position:5px 5px;border-bottom:1px solid #e2c10a} +#sns_login .sns-kakao {color:#3c1e1e} +#sns_login .sns-facebook{background-color:#3b579d;background-position:5px 5px;border-bottom:1px solid #28458f} +#sns_login .sns-google{background-color:#db4a3a;background-position:5px 5px;border-bottom:1px solid #c03121} +#sns_login .sns-twitter{background-color:#1ea1f2;background-position:5px 5px;border-bottom:1px solid #1e82c0} +#sns_login .sns-payco{background-color:#df0b00;background-position:5px 5px;border-bottom:1px solid #9d0800} +#sns_login .txt{text-align:left;padding-left:10px;border-left:1px solid rgba(0,0,0,0.1);display:block;font-weight:bold} +#sns_login .txt:hover{background:rgba(0,0,0,0.07)} + +/*회원가입 */ +#sns_register{margin:0 0 10px;padding:0;text-align:center} +#sns_register h2{text-align: left;padding: 15px 20px;border-bottom: 1px solid #dbdbdb;background: #f8f8f8;} +#sns_register .sns-wrap:after {display:block;visibility:hidden;clear:both;content:""} +#sns_register .sns-wrap{display:inline-block;margin:18px 0 15px;vertical-align:top} +#sns_register .sns-icon{display:inline-block;height:40px;line-height:40px;width:210px;margin:0 3px 5px;padding-left:40px;text-align:left;color:#fff;border-radius:2px;float:left} +#sns_register .sns-icon:nth-child(3n+1){clear:both} +#sns_register .sns-naver{background-color:#1fc800;background-position:5px 5px;border-bottom:1px solid #1ea505} +#sns_register .sns-kakao{background-color:#ffeb00;background-position:5px 5px;border-bottom:1px solid #e2c10a} +#sns_register .sns-kakao {color:#3c1e1e} +#sns_register .sns-facebook{background-color:#3b579d;background-position:5px 5px;border-bottom:1px solid #28458f} +#sns_register .sns-google{background-color:#db4a3a;background-position:5px 5px;border-bottom:1px solid #c03121} +#sns_register .sns-twitter{background-color:#1ea1f2;background-position:5px 5px;border-bottom:1px solid #1e82c0} +#sns_register .sns-payco{background-color:#df0b00;background-position:5px 5px;border-bottom:1px solid #9d0800} +#sns_register .txt{text-align:;padding-left:10px;border-left:1px solid rgba(0,0,0,0.1);display:block;font-weight:bold} +#sns_register .txt:hover{background:rgba(0,0,0,0.07)} + +/*기존 계정에 연결하기*/ + +/* Styles for Accordion */ + +.mbskin .toggle{position:relative;display:block;border:1px solid #c6cacc;margin-top:-1px;background-color: #fcfcfc;} +.mbskin .toggle .toggle-title{padding:13px 15px;line-height:20px} +.mbskin .toggle .title-name{display:block} +.mbskin .toggle .toggle-inner{padding:15px;line-height:1.5em;display:none;background:#fff;border-top:1px solid #e2e2e2;} +.mbskin .toggle .toggle-inner div{max-width:100%} +.mbskin .right_i{position:absolute;font-size:0.92em;top:10px;right:10px;padding:0 10px 0 0;border-radius:3px;display:inline-block;z-index: 2;background: #3497d9;color: #fff;border-bottom-color: #1977b5;cursor:pointer} +.mbskin .toggle .toggle-title .right_i i{background:url("./img/plus_minus.png") 0 -24px no-repeat;width:20px;height:24px;display:inline-block;vertical-align:middle} +.mbskin .toggle .toggle-title.active .right_i i{background:url("./img/plus_minus.png") 0 0 no-repeat} +.mbskin .all_agree{position:relative;display:block;;margin-bottom:6px;background:#fff;border:1px solid #c6cacc;border-top:0;padding:13px 15px;line-height:20px} + +#register_member .sns_tbl{background:#fff;;margin:10px 0;border:1px solid #c6cacc;} +.sns_tbl table{border:0} +.sns_tbl caption{ padding: 0 20px;line-height: 45px;font-size: 1.083em;border-bottom: 1px solid #e2e2e2;color: #253dbe;background: #fcfcfc;} +.sns_tbl th{width:100px;text-align:right;padding:10px;} +.sns_tbl td{padding:10px;} +.sns_tbl .email_msg{color:#777;margin:5px 0 0} + +#fregisterform .btn_confirm{text-align:center;margin:20px 0} +#fregisterform .btn_confirm .btn_submit{height:45px;;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .btn_confirm .btn_cancel{line-height:45px;height:45px;padding:0 30px;font-weight:bold;font-size:1.083em} + +#sns-link-pnl .connect-close {position:absolute;top:10px;right:10px;margin:0;padding:0;width:30px;height:30px;border:0;background:transparent;color:#383838;cursor:pointer;font-size:15px} +#sns-link-pnl .connect-close:hover {color:#ff5191} +#sns-link-pnl .connect-close .fa {margin:0 0 0 1px} +#sns-link-pnl .connect-close .txt {position:absolute;line-height:0;font-size:0;overflow:hidden} + +#sns-link-pnl #login_fs{margin:0 auto;width:100%;text-align:left} +#sns-link-pnl #login_fs label{display:block;display: block;font-size: 0.93em;color: #7a7a7a;margin: 5px 0;} +#sns-link-pnl #login_fs .lg_id,#sns-link-pnl #login_fs .lg_pw{width:100%;margin-bottom:5px;} +#sns-link-pnl #login_id,#sns-link-pnl #login_pw{width:100%} +#sns-link-pnl #login_fs .login_submit{width: 100%;height: 44px;font-size:1.167em;margin:10px auto 0;font-weight:bold;cursor:pointer;display:block;} +#sns-link-pnl .connect-fg {height:320px;text-align:left} +#sns-link-pnl .login_fs {margin:0 auto;width:260px} +#sns-link-pnl .connect-fg .connect-desc {margin:0 0 10px;padding:15px;border:1px solid #d6e9c6;background:#dff0d8;color:#3c763d} +#sns-link-pnl .connect-fg .connect-title {margin-top:25px;margin-bottom:10px;font-size:1.667em;font-weight:bold;text-align:center} + +.mbskin .member_connect:after {display:block;visibility:hidden;clear:both;content:""} +.mbskin .member_connect{margin-top:80px;background:#d9d9d9;border-radius:3px;padding:10px;text-align:left} +.mbskin .member_connect .strong{font-size:1em;font-weight:bold;margin:0 0 10px} +.mbskin .member_connect button{color: #fff;border:0;padding:6px 20px 7px;border:1px solid #6446e7;font-weight:bold;background: #6f50e7;border-radius:3px;font-size:0.91em} +.mbskin .member_connect button:hover{background:#6446e7} + +html.remodal-is-locked {overflow-y:scroll !important} + +@media only screen and (min-width: 641px) { + #sns-link-pnl.remodal{max-width:400px;padding:50px} +} \ No newline at end of file diff --git a/skin/visit/basic/style.css b/skin/visit/basic/style.css index 6b061cb27..039875a6a 100644 --- a/skin/visit/basic/style.css +++ b/skin/visit/basic/style.css @@ -1,13 +1,15 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 방문자 집계 */ -#visit {border-bottom:1px dotted #dde4e9} -#visit div {margin:0 auto;width:970px;zoom:1} -#visit div:after {display:block;visibility:hidden;clear:both;content:""} -#visit h2 {float:left;padding:10px 45px 10px 0} -#visit dl {float:left;margin:0 0 0 10px;padding:0} -#visit dt {float:left;margin:0;padding:10px 0 10px} -#visit dd {float:left;margin:0 30px 0 0;padding:10px} -#visit a {display:inline-block;padding:10px;text-decoration:none} -#visit a:focus, #visit a:hover {} \ No newline at end of file +#visit {border: 1px solid #d2d9e6; border-bottom: 1px solid #c1ccda;margin:40px 20px 20px;background:#fff;position:relative; +-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); +-moz-box-shadow: 0 1px 2px rgba(0,0,0,0.1); +box-shadow:0 1px 2px rgba(0,0,0,0.1)} +#visit .btn_admin{position:absolute;top:10px;right:10px;height:25px;line-height:25px;padding:0 5px;border-radius:3px} +#visit h2 {font-size:1.167em;text-align:center;padding-bottom:15px;padding-top:25px;color:#16b3d6;position:relative} +#visit h2 i{position:absolute;top:-22px;left:50%;width:44px;line-height:44px;margin-left:-22px;border-radius:25px;background:#16b3d6;color:#fff} +#visit dl {border-top:1px solid #e9e9e9;padding:10px 15px;border-radius:5px} +#visit dl:after {display:block;visibility:hidden;clear:both;content:""} +#visit dt {float:left;width:20%;padding:0 5px;line-height:23px;height:23px;color:#555} +#visit dt span{display:inline-block;width:5px;height:5px;border-radius:50%;vertical-align: middle;} +#visit dd {float:left;;width:30%;padding:0 5px;;text-align:right;text-align:right;font-weight:bold;line-height:23px;height:23px;font-size:0.92em} +#visit dd strong{display:inline-block;padding:0 5px;border-radius:20px;line-height:15px;color:#fff;} diff --git a/skin/visit/basic/visit.skin.php b/skin/visit/basic/visit.skin.php index 87e481d2e..768a58829 100644 --- a/skin/visit/basic/visit.skin.php +++ b/skin/visit/basic/visit.skin.php @@ -9,19 +9,17 @@ add_stylesheet('', 0
    -
    -

    접속자집계

    -
    -
    오늘
    -
    -
    어제
    -
    -
    최대
    -
    -
    전체
    -
    -
    - 상세보기 -
    +

    접속자집계

    +
    +
    오늘
    +
    +
    어제
    +
    +
    최대
    +
    +
    전체
    +
    +
    + 상세보기
    \ No newline at end of file diff --git a/tail.php b/tail.php index 0fe5db786..9a83862d4 100644 --- a/tail.php +++ b/tail.php @@ -13,33 +13,53 @@ if (G5_IS_MOBILE) { ?>
    +
    + + + + +
    +

    - - -
    <?php echo G5_VERSION ?>
    -
    -
    -
    -
    + +
    + +
    <?php echo G5_VERSION ?>
    +
    Copyright © 소유하신 도메인. All rights reserved.
    + + +
    -모바일 버전으로 보기 +
    -
    +
    - +
    diff --git a/theme/basic/head.php b/theme/basic/head.php index 2d5bf0af9..61aaaef61 100644 --- a/theme/basic/head.php +++ b/theme/basic/head.php @@ -26,134 +26,202 @@ include_once(G5_LIB_PATH.'/popular.lib.php'); include G5_BBS_PATH.'/newwin.inc.php'; // 팝업레이어 } ?> +
    + +
    +
    + 사이트 내 전체검색 +
    + + + + + +
    -
    - 사이트 내 전체검색 -
    - - - - - -
    + - // 검색에 많은 부하가 걸리는 경우 이 주석을 제거하세요. - var cnt = 0; - for (var i=0; i 1) { - alert("빠른 검색을 위하여 검색어에 공백은 한개만 입력할 수 있습니다."); - f.stx.select(); - f.stx.focus(); - return false; - } - - return true; - } - -
    - -
    - - - - +
    + +
    - -
    - -
    - +
    +
    +
    -
    - - -
    +
    +
    -
    \ No newline at end of file +

    + diff --git a/theme/basic/head.sub.php b/theme/basic/head.sub.php index a282caaf2..fdbcf09af 100644 --- a/theme/basic/head.sub.php +++ b/theme/basic/head.sub.php @@ -39,7 +39,7 @@ if (G5_IS_MOBILE) { echo ''.PHP_EOL; } else { echo ''.PHP_EOL; - echo ''.PHP_EOL; + echo ''.PHP_EOL; } if($config['cf_add_meta']) @@ -66,6 +66,8 @@ var g5_cookie_domain = ""; + + '.PHP_EOL; // overflow scroll 감지 @@ -74,7 +76,7 @@ if(!defined('G5_IS_ADMIN')) echo $config['cf_add_script']; ?> - +> Cgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ka}t%N=+=uFAB-e&w-_YfQeiaKZd}bLY&SHFL)FX;Y_6o-}bne_wA;cUNaeds}Nub5mnOeO+x$bya0Wd0A;m zaZzDGeqL@)c2;IadRl5qa#CVKd|YfybW~(Scvxsia8O`?zn`y7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k6E|}sGdCj>S7#SssJoguIU88Gnp!$p zn7O$)8XG#o^t$9Hm*%GCmB93-AoQBz)C)=qxdlL*T~doO%TiO^it=+6z+Se>#O)R% zoaRCGrr>sqF;2buK*#8VA{Hs4VM4&v17gCHEsz6G_^Elo)LsNk){OuE{r&U%*Uul{ zzkU7k`P0V_@87+B^ZM1x7tfzPee(Fx!w2{8-Mw@B*3BE&uU)-z`O?J;=g*xzbNbZD z6UUDoJ#zTa!2|pE?cK9`*UlZ=w{6|BdDF%X>({MavwGFa70Z_`U9x!5!Ugl^&7CuQ z*322xr%jzQdD6rQ{e8VX-Cdm>?QN|s%}tFB^>wv1)m4=h1nAc$w`R`@o}*+(NU2R;bEa6!9jrm{(inb-d>&_?ryFw&Q6XF_I9>5)>f7l=4PfQ z#zuw)`g*!L+FF_#>T0Sg%1Vj~@^Z2=(o&KV;$osA!a{-q{CvDT++3U->};$o%uI|7 z42nNlfFvV>4ybSh)t3w$atzEIED8k=9Gcjf86qkQ7CN``%R9N8Fj#o7iGhiU!5RQh Cn}zWJ literal 0 HcmV?d00001 diff --git a/theme/basic/img/btn_next.gif b/theme/basic/img/btn_next.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb714a33b9d4bfc35f39d34b184f4e2c9625c434 GIT binary patch literal 1169 zcmZ?wbhEHbWMN=uXkcWRKY#xJ|Nj;Lb4U0FD7Yk+Bm!w0`-+0ZCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^K}F`_YUXHS=;&f( z1<(a0N3l8S6q^qmz)Z-HxpVgsyL#pF zrHdENpF4Zz^r@34jvqUEVojbN~+qz}*ri~lcuUorj^{SOCmM>en zWbvYf3+B(8J7@N+nKPzOn>uCkq=^&y`+9r2yE;4C+ge+in;IMH>uPJNt12tX%Sua% ziwXi?qaq{1!$L!Xg8~Em{d|4Ay*xeK-CSLqog5wP z?QCtVtt>6f%}h;lT#wKO%<)l^lKl@t}^7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k11BeALjz|+S7#SssJoh3SeUywyBHf= zxSE(7S{NI`^t$9Hm*%GCmB93-AoLpH)C)=qxdlL*T~doO%TiO^it=+6z+Se>#OW3% zH=O1{^`_uv@OxBG5|NZ^*``6DO z-@kqR^7+%p5AWZ-ee?R&%NNg|J$>@{(ZdJ#@7=v~`_|1H*RNf@a{1E53+K6ZM9qnzcEzM1h4fS=kHPuy>73F26CB;RB1^IcoIoVm6 z8R==MDalER3Gs2UG0{A;Cd`0selzKHgrQ9`0_gF3wJl4)%7oHr7^_7UpKA zCdNjF2KsusI@(&A8tQ7QD#}WV3i5KYGSX6#65?W_BEmv~0{ncuJltHI9PDhYEX+)d q3=E1tS%4%XgAS;01l5-e96}7t94rPC6dIa2c;$373>X?37_0$NrGO#; literal 0 HcmV?d00001 diff --git a/theme/basic/img/bullet.gif b/theme/basic/img/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7cd0fc913b9f1ffc467b34d709b472d15c5c41b GIT binary patch literal 1165 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 literal 0 HcmV?d00001 diff --git a/theme/basic/img/gnb_bg2.gif b/theme/basic/img/gnb_bg2.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe636b93014581dea522c3b1071d7217575b760b GIT binary patch literal 49 zcmZ?wbhEHbWM^PuXkcJiz5U1k|Nj+#vM@3*Ff!;c00Bsbfr*2qNo>{49SMvK)&Nd1 B3|{~M literal 0 HcmV?d00001 diff --git a/theme/basic/img/mobile/btn_close.png b/theme/basic/img/mobile/btn_close.png new file mode 100644 index 0000000000000000000000000000000000000000..22f13faaec161bb79b92f35cab729acfd69d8bb5 GIT binary patch literal 3265 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 C4nrjX literal 0 HcmV?d00001 diff --git a/theme/basic/img/mobile/gnb_bg2.png b/theme/basic/img/mobile/gnb_bg2.png new file mode 100644 index 0000000000000000000000000000000000000000..5828f41b7cd81d3958d5383073a5c8ba91328027 GIT binary patch literal 976 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 UB`Y^oGynhq07*qoM6N<$g4?ZVo&W#< literal 0 HcmV?d00001 diff --git a/theme/basic/index.php b/theme/basic/index.php index bb7a67441..f7bd1020b 100644 --- a/theme/basic/index.php +++ b/theme/basic/index.php @@ -11,32 +11,49 @@ include_once(G5_THEME_PATH.'/head.php'); ?>

    최신글

    + +
    - 'mobile' "; -if(!$is_admin) - $sql .= " and a.bo_use_cert = '' "; -$sql .= " order by b.gr_order, a.bo_order "; -$result = sql_query($sql); -for ($i=0; $row=sql_fetch_array($result); $i++) { - if ($i%2==1) $lt_style = "margin-left:20px"; - else $lt_style = ""; -?> -
    + + 'mobile' "; + if(!$is_admin) + $sql .= " and a.bo_use_cert = '' "; + $sql .= " and a.bo_table not in ('notice', 'gallery') "; //공지사항과 갤러리 게시판은 제외 + $sql .= " order by b.gr_order, a.bo_order "; + $result = sql_query($sql); + for ($i=0; $row=sql_fetch_array($result); $i++) { + if ($i%2==1) $lt_style = "margin-left:2%"; + else $lt_style = ""; + ?> +
    - - + + + +
    + +
    + + + +
    - +
    + +
      '.PHP_EOL; + echo ' - + +
      +

      사이트 내 전체검색

      +
      + + + + +
      + + +
    - + +
    + -
    -

    사이트 내 전체검색

    -
    - - - - -
    + - - +
    + + + + +
    - - - +
    -
    +
    -
    - -
    +
    -
    -
    - - - - -
    \ No newline at end of file +

    diff --git a/theme/basic/mobile/skin/board/basic/img/btn_next2.gif b/theme/basic/mobile/skin/board/basic/img/btn_next2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f17993bb163dcdecc4e41ffc964c31e45d79877a GIT binary patch literal 55 zcmZ?wbhEHbWMklFXkcK-$;tWu|G(l-7DfgJMg|=QAOOiQF!8z6B}kmwJ0V&4R77?) HD}yxvenk!U literal 0 HcmV?d00001 diff --git a/theme/basic/mobile/skin/board/basic/img/btn_prev2.gif b/theme/basic/mobile/skin/board/basic/img/btn_prev2.gif new file mode 100644 index 0000000000000000000000000000000000000000..63604af1a8a977511177cde67e5c0c6a9fad5baa GIT binary patch literal 56 zcmZ?wbhEHbWMklFXkcK-$;tWu|G(l-7DfgJMg|=QAOOiQF!A^Bich%l`^LnsbI(Pt JEMQ=;1^}Mz5N7}Y literal 0 HcmV?d00001 diff --git a/theme/basic/mobile/skin/board/basic/img/cmt_btn.png b/theme/basic/mobile/skin/board/basic/img/cmt_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..202f1ff475be9d3b371fb8d87034e9cdebd8d37f GIT binary patch literal 2862 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 VnTK9&Vf6=<>z=NDF6*2UngFu!X5|0? literal 0 HcmV?d00001 diff --git a/theme/basic/mobile/skin/board/basic/img/icon_file.gif b/theme/basic/mobile/skin/board/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/theme/basic/mobile/skin/board/basic/img/icon_good.png b/theme/basic/mobile/skin/board/basic/img/icon_good.png new file mode 100644 index 0000000000000000000000000000000000000000..69841a1340a76f2b4bfeb4a3a9e74b8a5846fe43 GIT binary patch literal 1288 zcmbVMZA{!`9Pfq1I3`QxTc&=n7KtP5t}l1(T`MO!+PiVnyJN>0&WwBEfC(!}ei*Fj>^OWDGN(0*8Je`(V?j z&)fg^`@eUnIk~f{^3h5JL8{_SLK@Cn-Er?d@cXp7a|uq5*wL)rqUY?QXaXc6>m2}% zt70ce15xgM@jR$Ukcym=$=cb(bDX5BKGBu&IjRBC2vXnR7@|}FHrfF?6)lWipZo$t z6*-Kx(g`AA@F1@=^_ifhFPV}03KA=04bPzU4hIQTV2h}uc54>rgs~M~4zAr}979(` z>_Qk@H7c8EMtR)?DDCrmC4wYThVhXBnqkNtC`FJIPQaJ(k^zopI4X#)Js8wx$~i7A z#MX4dT^P&Tw!z_eu~_sK{XX67#7UNAT@H%!LJ6PKqSU6p#T#VSU*WdnGnnRSt=SMLm@vyM))!|u35IINuaD(fqK`l z^j)zWZvxTQ&5W*hmn)z-uiLtn*A0|!VbJZZiYDtttJY1=s<#3#m6w1VGj$bRi7%&Y zpx;mNQ3?*CG0Ly_%|{4!*b2hKZZ{{_(Jop+76y-KXW$q_Xo-O%a=aC`cZ1WboBP*_w2RP7iz}1 zV^=nX_v6!qt#o-lU7Q+y{Qf8J%TJ%W{NCIhGTuZlyfwY$jBz-(>G0xL74Q7;`q;^^ zlKIAaa(kr{`;g;i@Po#IUir7dns1#{!}Otrh64j_??1->a;J+Je0g$qPisy6$NN4T zPqw!SQ$&}fX;VWZBX4r0V*ku*{d+e*Fwy!--PpjXRQ0HnPcMv*{Q2;5^>P0CkA>4u zBtqvLvG3W^1y4>o7}`fC^aW*U8M$=p`L)uVzOBcVHvhC-c=byHnc~&&{ z->-j+TI7Rv!7V`uOwG1%KXu`g-ElyLo%xOxyl()9DW@ z4u9Nq;_b{GKkvSLl0M@}>a^$Oi(YlCc{hLW^YVqy3g$hEnecJr$$!6oy_>V=^X`lP z|Nm#83@H9&VPs&?V$cB@1M(9CTZ}`flj9^Et%(QJ7fUf1%n9mvbTfv5`KaU4O$-dO z?;0DPu2Nzx<~oougO#bcIZ)xq*%-!!4ICLCVuTnuw1gSdDmWR0)A$)Q)VY-y_!|Tm Sl@%BT8e;g^*!U_O8LR=!XM;xo literal 97 zcmZ?wbhEHbKCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/theme/basic/mobile/skin/board/basic/img/icon_lock.png b/theme/basic/mobile/skin/board/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; RCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ke6^lgE!9KDdAH?w#AWZr-?l?dp}w zmo8p7f9~v=)2B|JIDYKtk;8`$9@xKc@1EVecJA1|ZR?iJn>KD(zi#cC)vH#nSiWrO zlEsS_E|@=W?wr}PX3m&CZR(WClO|5+@9XX9?&|DlZ)CJqCAJzX7bElmw|HB}X5B}D~!IawKLDM<-&F;Nj=AwdCtK3*Pf zE=~@1HdYp9CPoGZ#h)xdl954&0SG`P4+E1_OY=;&S8qgOKCNk!;0vz)T^YHC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/theme/basic/mobile/skin/board/basic/img/icon_view.png b/theme/basic/mobile/skin/board/basic/img/icon_view.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa5eb1e62ce43590450d01d3048539ee2b6a4d0 GIT binary patch literal 1936 zcmaJ?Yfuws6b%UKprR-QL8~!V1kGzh5=crwNC*!JVu*@`Dj``ygzSc7ArQ4AVSMta zpn_sV5zwkAK>|XtNa~0qEn@M7)=^?gEDknSrUHW4jTPD-r8~R(J?5Nq@BQwX`S!;| zhs|;Fbi!aTb0WgI0(A7YeKV({|NQYLIXZYCp>aqooQ$YNN)Qt)fs;U7gj^&A1)xZh zoqh`pz+k4~Wx_ZljvvJm!*Y_yh9PCi6(}2n2?)wkh{UNNf=dFWGKh`0wp_#GWD+)h z6P-`tD>z_^EL@`mV>Qu2u_jf_l;DE`aRFH@R6q_QB3za{4N|eP*!YjSEOc($CgX7* zAxJ74|94Vx{1_YuR)RP>$(Jam0054`AOSQwg8>k5R0=>PQ_z<|1ZXTegGKejeR}X{ zG^He&CE)Tt#X?tXd#e%Y@zP4O($)OE+&l+La5u7sIBiN_OdV-2Zso5urTZKz|rj~1?dZK zb{#8CjpD|Nwfost`OSemR zBX;-E1Pis$ddPa=?AB{TZ0X7ataUpdkB&cmHu^=^Xh4@WyZqUhNzpSzUaPe(Ep5`K zJDQ!wtxjGgM~>WhQ@(Vzo!Lk^Xs5{`opKv?c)Dw4?~O;P}R5c^pUZpZUb$0U~;mNE>O8+MB|$ z3C@L{9rp)Q>(A-phBmr(jQGF6J{!SA{`PL0xZHau=0RFtb?>V0LVip?cn%w7|6J~8$@INJzyC0%sn zbl{$#*x7ltIc|fC9q$fTKOWls1al^eQPVpA>d?MxL%K>fVEbsqA0ZCiLryVo}h)1K>!c1UNY zZa-3?TkN9b_u=U^-IcHGPUNTe_rJ~M7^2jf9Z7xVxczsywJW8@vSqv6IfhU?z;qB-f1bKoj*=pghq2Og(PbK0xq=_ A=>Px# literal 0 HcmV?d00001 diff --git a/theme/basic/mobile/skin/board/basic/img/require.png b/theme/basic/mobile/skin/board/basic/img/require.png new file mode 100644 index 0000000000000000000000000000000000000000..c03e1eb6f5e8bc7ac6e40bbf6324bd2ac3fd3039 GIT binary patch literal 2922 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 UB`Y^oGynhq07*qoM6N<$g4?ZVo&W#< literal 0 HcmV?d00001 diff --git a/theme/basic/mobile/skin/board/basic/img/sch_btn.png b/theme/basic/mobile/skin/board/basic/img/sch_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..94f98db8f486c86e4c73c8c457b1f6170d716d7e GIT binary patch literal 1234 zcmbVMO>Em_7L#sBtRF5+bZX+C#7^urYZBY(0!yiqNNf2KbK)0BR-RP@zdo6HJ|iG^BCa5F7?#5?nZ-4hg{lAu$fLXon#|%jYyH9I73# zY=1v~p6C7f-q&x8jtuV)JsBbhVt?+GQo!Q@|JfVF?-Sp>^E@7UTy@MXqN>}_Y)GVa zRE8jDY7?*kHGOva9vmcy&ZN-)x5Cf^tBZf=u~W@?i$Df zzM@t}Gj5W?o^FR=*7NxtVasVH3a5=>*cI)RX6ukHKnKm( z6?`7mzBU=>?(v3vAofOj(Khg*Xj2NR%$U$}b4rrJUn07pOA41r^U=7da*Cn~EGx!E zURG2lnqdWwRpM=p-MAu?&I+-NsLHa)vZ|2g8CI1US&pkwUXJZ>bC%<3Rt2{08rW`& zn|Lf&l5MED$Sxr?)vkci8gh|SLvGzLkJ6Z+W#yO~GZDfLGekEfU z`%F|-)7iKh!yY%|meY*F@q8?v&dOXOLAAL0|H&DRouU2W_)oF4w{Qje)1A`Ci=F0y z7Va1ux5m=32j37xMiq zJLKa1C7$hMyGgXCJaK*PRd6MA_l1Q=LGlK{9w2|~yg5K3MF2hb9v(`4{njtXJHW}s zYhNB6|Ko6J{b|zqY5m;8{xPc7S{uH8>2RuRF?l`_T>0S7rJt`Z@AKr5 hVCZu7y(G~QB)VQHjxXGLX~6%>', 0); ?> -

    목록

    - + + + -
    "> +
    -
    -
    - Total - 페이지 -
    - - - - +
    + 전체 + 페이지
    +
    @@ -49,79 +45,75 @@ add_stylesheet('', 0 -
      -
    • 목록
    • +
    • 목록
    • -
    • -
    • -
    • +
    • +
    • +
    - -
    @@ -144,7 +136,7 @@ add_stylesheet('', 0 - @@ -153,8 +145,8 @@ add_stylesheet('', 0 - - + + diff --git a/theme/basic/mobile/skin/board/basic/style.css b/theme/basic/mobile/skin/board/basic/style.css index b1d433d3a..af21b8c7d 100644 --- a/theme/basic/mobile/skin/board/basic/style.css +++ b/theme/basic/mobile/skin/board/basic/style.css @@ -1,5 +1,4 @@ @charset "utf-8"; -/* SIR 지운아빠 */ /* ### 기본 스타일 커스터마이징 시작 ### */ @@ -11,7 +10,7 @@ #bo_list a.btn_b02:focus, #bo_list .btn_b02:hover {} #bo_list a.btn_admin {} /* 관리자 전용 버튼 */ #bo_list a.btn_admin:focus, #bo_list a.btn_admin:hover {} - +.chk_all{margin:10px 0} /* 읽기 버튼 */ #bo_v a.btn_b01 {} #bo_v a.btn_b01:focus, #bo_v .btn_b01:hover {} @@ -26,55 +25,6 @@ #bo_w .btn_cancel {} #bo_w .btn_frmline {} /* 우편번호검색버튼 등 */ -/* 기본테이블 */ -/* 목록 테이블 */ -#bo_list .tbl_head01 {} -#bo_list .tbl_head01 caption {} -#bo_list .tbl_head01 thead th {} -#bo_list .tbl_head01 thead a {} -#bo_list .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */ -#bo_list .tbl_head01 tfoot th {} -#bo_list .tbl_head01 tfoot td {} -#bo_list .tbl_head01 tbody th {} -#bo_list .tbl_head01 td {} -#bo_list .tbl_head01 a {} -#bo_list td.empty_table {} - -/* 읽기 내 테이블 */ -#bo_v .tbl_head01 {} -#bo_v .tbl_head01 caption {} -#bo_v .tbl_head01 thead th {} -#bo_v .tbl_head01 thead a {} -#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */ -#bo_v .tbl_head01 tfoot th {} -#bo_v .tbl_head01 tfoot td {} -#bo_v .tbl_head01 tbody th {} -#bo_v .tbl_head01 td {} -#bo_v .tbl_head01 a {} -#bo_v td.empty_table {} - -/* 쓰기 테이블 */ -#bo_w table {} -#bo_w caption {} -#bo_w .frm_address {} -#bo_w .frm_file {} -#bo_w .frm_info {} - -#bo_w .tbl_frm01 {} -#bo_w .tbl_frm01 caption {} -#bo_w .tbl_frm01 th {} -#bo_w .tbl_frm01 td {} -#bo_w .tbl_frm01 textarea, #bo_w .frm_input {} -#bo_w .tbl_frm01 textarea {} -/* -#bo_w .tbl_frm01 #captcha {} -#bo_w .tbl_frm01 #captcha input {} -*/ -#bo_w .tbl_frm01 a {} - -#bo_w .required, #bo_w textarea.required {} - -/* ### 기본 스타일 커스터마이징 끝 ### */ /* 게시판 목록 */ #bo_list .td_chk {width:30px;text-align:center} @@ -88,14 +38,24 @@ #bo_list .td_date {width:60px;text-align:center} #bo_list .td_datetime {width:150px;text-align:center} #bo_list .td_mng {width:80px;text-align:center} +#bo_list .notice_icon{display: inline-block;background: #ff6f6f;padding: 0 5px;line-height: 20px;border-radius: 5px;font-weight: normal;font-size:11px;color: #fff;} +#bo_list .notice_icon i{color:#fff} +#bo_list .bo_subject .fa-download{width:16px;height:16px;line-height:16px;background:#ecaa30;color:#fff;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .fa-link{width:16px;height:16px;line-height:16px;background:#2aa974;color:#fff;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .fa-heart{color:#ff0000;;text-align:center;font-size:10px;border-radius:2px} +#bo_list .bo_subject .new_icon{display:inline-block;padding: 0 3px;line-height:16px ;font-size:0.833em;color:#fff;background:#c56bed} +#bo_list .bo_tit .fa-lock{color:#666} + #bo_cate h2 {width:0;height:0;font-size:0;line-height:0;overflow:hidden} -#bo_cate ul {margin:5px 10px;padding-left:1px;zoom:1} -#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} -#bo_cate li {float:left;margin-bottom:-1px;width:25%} -#bo_cate a {display:block;position:relative;margin-left:-1px;padding:5px 0;border:1px solid #ddd;background:#f7f7f7;color:#888;text-align:center;text-decoration:none;letter-spacing:-0.1em} -#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none} -#bo_cate #bo_cate_on {z-index:2;border:1px solid #565e60;background:#fff;color:#565e60;font-weight:bold} +#bo_cate ul {margin: 10px;padding-left:1px;zoom:1} +#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} +#bo_cate li{display:inline-block;float:left;margin:3px 5px 3px 0} +#bo_cate a {display:block;line-height:24px;padding:0 10px;border-radius:13px;background:#fff;} +#bo_cate #bo_cate_on {background:#4162ff;color:#fff; +-webkit-box-shadow:0 0 5px rgba(65,98,255,0.8); +-moz-box-shadow:0 0 5px rgba(65,98,255,0.8); +box-shadow: 0 0 8px rgba(65,98,255,0.8);} /* 관리자일 때 */ #bo_list_admin th label {position:absolute;font-size:0;line-height:0;overflow:hidden} @@ -108,29 +68,40 @@ /* 관리자가 아닐 때 */ #bo_list th:nth-of-type(2) {width:100px} - #bo_list td:nth-of-type(2) {text-align:center} /* 게시판 목록 공통 */ -.bo_fx {margin-bottom:5px;padding:5px 10px} +.bo_fx {margin-bottom:5px;padding:0 10px} .bo_fx:after {display:block;visibility:hidden;clear:both;content:""} .bo_fx ul {margin:0;padding:0;list-style:none} -#bo_list_total {float:left;padding:0;height:2.5em;line-height:2.5em} +#bo_list_total{position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden;font-size:0} .btn_bo_user {float:right;margin:0;padding:0;list-style:none} .btn_bo_user li {float:left;margin-left:5px} -.btn_bo_adm {float:left} -.btn_bo_adm li {float:left;margin-right:5px} -.btn_bo_adm input {padding:8px;border:0;background:#e8180c;color:#fff;text-decoration:none;vertical-align:middle} +.btn_bo_adm {text-align:center} +.btn_bo_adm li {display:inline-block;} +.btn_bo_adm button {border:0;padding:0 10px;background:#d13f4a;color:#fff;text-decoration:none;vertical-align:middle} .bo_notice td {background:#f7f7f7} .bo_notice td a {font-weight:bold} .td_num strong {color:#000} -.bo_cate_link {display:inline-block;margin:0 3px 0 0;padding:0 6px 0 0;border-right:1px solid #e7f1ed;color:#999 !important;font-weight:bold;text-decoration:none} /* 글제목줄 분류스타일 */ +.bo_cate_link {;color:#3ca1ff !important;font-weight:normal;text-decoration:none;font-size:0.92em} /* 글제목줄 분류스타일 */ +.bo_subject{display:block;font-size:1.083em;font-weight:bold;margin:5px 0} +.bo_subject i{color: #8d96c2;font-size:12px} +.bo_subject .fa-heart{color:#ff0000} .bo_current {color:#e8180c} -.td_subject a {display:block} -.td_subject img {margin-left:3px} -#bo_list .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold} +.bo_info{border-top: 1px solid #eee;margin: 10px 0 0;line-height: 20px;color: #666;position: relative;padding-top: 10px;vertical-align:top} +.bo_info .comment_icon{background:url(./img/icon_comment.png) no-repeat 50% 50% ;display:inline-block;width:20px;height:28px;text-indent:-999px;overflow:hidden;vertical-align:top;background-size:70%;margin:0 0px 0 5px} +.bo_info .bo_date{position:absolute;top:10px;right:0;font-style: italic;} +.bo_info .cnt_cmt {display:inline-block;margin: 0 5px 0 3px;} +.bo_info .profile_img img{border-radius:50%;vertical-align:top} -#bo_sch {margin-bottom:10px;padding-top:5px;text-align:center} +#bo_sch {background:#fff;border:1px solid #bdc2d8;position:relative;margin:10px;border-radius:3px} +#bo_sch:after {display:block;visibility:hidden;clear:both;content:""} +#bo_sch legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} +#bo_sch select{border:0;;margin:9px 0;height:20px;border-right:1px solid #ddd;float:left;width:40%} +#bo_sch .sch_input{height:38px;border:0;padding:0;background-color:transparent;float:left;width:60%;padding:0 40px 0 10px} +#bo_sch .sch_btn{height:38px;position:absolute;top:0;right:0;border:0;width:40px;background:none;font-size:15px} + +#bo_list{margin:10px 0} /* 게시판 쓰기 */ #bo_w #wr_email, #bo_w #wr_homepage, #bo_w #wr_subject {width:100%} @@ -142,97 +113,163 @@ #wr_email, #wr_homepage, #wr_subject, .wr_link {width:100%} /* 게시판 읽기 */ -#bo_v {margin-bottom:15px;padding-bottom:15px} +#bo_v {padding:20px 10px 10px;background:#fff +;-webkit-box-shadow: 0 1px 4px #ddd; +-moz-box-shadow: 0 1px 4px #ddd; +box-shadow: 0 1px 4px #ddd;} -#bo_v_table {padding:0 10px;color:#999;font-size:0.9em;font-weight:bold} +#bo_v_table {padding: 10px;color:#999;font-size:0.9em;font-weight:bold} -#bo_v_title {padding:0 10px 5px;font-size:1.2em} +#bo_v_title {;text-align:center} +.bo_v_cate{display:inline-block;background: #4162ff;color: #fff;border-radius: 13px;line-height: 24px;padding: 0 10px;font-weight:normal; +-webkit-box-shadow: 0 0 5px rgba(65,98,255,0.8); +-moz-box-shadow: 0 0 5px rgba(65,98,255,0.8); +box-shadow: 0 0 8px rgba(65,98,255,0.8);} +.bo_v_tit{display:block;font-size:1.5em;margin:10px 0 0} +#bo_v header p{font-size:0.92em;color:#777;font-style:italic ;text-align:center;margin:10px 0 0 } -#bo_v_info {padding:0 10px 10px;border-bottom:1px solid #ddd} +#bo_v_info {padding:15px 0px 10px;border-bottom:1px solid #eee;text-align:center;color:#666;line-height:20px;} #bo_v_info h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} -#bo_v_info {} -#bo_v_info strong {display:inline-block;margin:0 0 0 5px;font-weight:normal} +#bo_v_info strong {display:inline-block;font-weight:normal;margin:0 5px} +#bo_v_info .profile_img img{border-radius:50%;vertical-align:top} +#bo_v_info .icon_view{display:inline-block;background:url(./img/icon_view.png) no-repeat 50% 50%;background-size:80%;height:15px;width:20px;overflow:hidden;text-indent:-999px;vertical-align:middle;margin:0 3px 0 5px} +#bo_v_info .icon_comment{display:inline-block;background:url(./img/icon_comment.png) no-repeat 50% 50%;background-size:70%;height:15px;width:20px;overflow:hidden;text-indent:-999px;vertical-align:middle;margin:0 3px 0 5px} -#bo_v_file {} -#bo_v_file h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} +#bo_v_file {margin:10px 0} +#bo_v_file h2 {background:#949ab4;color:#fff;margin-bottom:1px;line-height:35px;padding: 0 10px} #bo_v_file ul {margin:0;padding:0;list-style:none} -#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f7} -#bo_v_file a {display:inline-block;padding:5px 0;color:#000;text-decoration:none} +#bo_v_file li {padding: 10px;border-bottom:1px solid #fff;background:#f1f7fa;color:#777} +#bo_v_file a {display:block;color:#000;text-decoration:none;margin:0 0 3px} #bo_v_file a:focus, #bo_v_file a:hover, #bo_v_file a:active {text-decoration:none} -.bo_v_file_cnt {display:inline-block;margin:0 10px} +#bo_v_file a strong{color:#3497d9;text-decoration:underline} +.bo_v_file_cnt {font-size:0.92em} -#bo_v_link {} -#bo_v_link h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} +#bo_v_link{margin:10px 0} +#bo_v_link h2 {background:#949ab4;color:#fff;margin-bottom:1px;line-height:35px;padding: 0 10px} #bo_v_link ul {margin:0;padding:0;list-style:none} -#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f7} -#bo_v_link a {display:inline-block;padding:5px 0;color:#000;text-decoration:none} +#bo_v_link li {padding: 10px;border-bottom:1px solid #fff;background:#f1f7fa;color:#777} +#bo_v_link a {display:block;color:#000;text-decoration:none;margin:0 0 3px} +#bo_v_link a strong{color:#3497d9;text-decoration:underline} #bo_v_link a:focus, #bo_v_link a:hover, #bo_v_link a:active {text-decoration:none} -.bo_v_link_cnt {display:inline-block;margin:0 10px} +.bo_v_link_cnt {font-size:0.92em} -#bo_v_top {margin:0 0 10px;padding:10px} +#bo_v_top {margin:10px 0;} #bo_v_top:after {display:block;visibility:hidden;clear:both;content:""} #bo_v_top h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} #bo_v_top ul {margin:0;padding:0;list-style:none} +#bo_v_top ul:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_top ul li{display:inline-block;} +.bo_v_left{float:left} +.bo_v_right{float:right} #bo_v_bot {padding:0 10px} #bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""} #bo_v_bot h2 {position:absolute;font-size:0;text-indent:-9999em;line-height:0;overflow:hidden} #bo_v_bot ul {margin:0;padding:0;list-style:none} -.bo_v_nb {float:left} -.bo_v_nb li {float:left;margin-right:5px} -.bo_v_com {float:right} -.bo_v_com li {float:left;margin-left:5px} +.bo_v_nb{margin:10px 0;border-top:1px solid #ddd;border-bottom:1px solid #ddd;text-align:center;position:relative;} +.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""} +.bo_v_nb li {} +.bo_v_nb li a{display:inline-block;padding:10px;color:#777} +.bo_v_nb .bo_v_next{;position:absolute;top:0;right:0;} +.bo_v_nb .bo_v_prev{;position:absolute;top:0;left:0;} -#bo_v_atc {padding:0 10px;min-height:200px} +#bo_v_atc {min-height:200px} #bo_v_atc_title {margin:0;padding:0;height:0;overflow:hidden} #bo_v_img {margin:0 0 10px;width:100%;overflow:hidden;zoom:1} #bo_v_img:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_img a.view_image{display:block} #bo_v_img img {margin-bottom:15px;max-width:100%;height:auto} -#bo_v_con {margin-bottom:20px;width:100%;font-size:1.250em;line-height:1.7em;word-break:break-all;overflow:hidden} +#bo_v_con {min-height:200px;margin-bottom:20px;width:100%;font-size:1.250em;line-height:1.7em;word-break:break-all;overflow:hidden} #bo_v_con a {color:#000;text-decoration:underline} #bo_v_con img {max-width:100%;height:auto} -#bo_v_act {position:relative;margin-bottom:20px;text-align:center} +#bo_v_act {margin-bottom:30px;text-align:center} +#bo_v_act .bo_v_act_gng {position:relative} #bo_v_act a {margin-right:5px;vertical-align:middle} -#bo_v_act strong {color:#ff3061} -#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;right:10%;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center} +#bo_v_act a:hover{background-color:#f3f3f3} +#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center} +#bo_v_act .bo_v_good{padding:15px 0;display:inline-block;border:1px solid #000;width:70px;height:70px;line-height:20px;border-radius:50%;font-style:italic} +#bo_v_act .bo_v_nogood{padding:15px 0;display:inline-block;border:1px solid #000;width:70px;height:70px;line-height:20px;border-radius:50%;font-style:italic} +#bo_v_act .bo_v_good i,#bo_v_act .bo_v_nogood i{font-size:18px;} +#bo_v_share{position:relative;margin:20px 0;text-align:right} +#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""} +#bo_v_share .btn_scrap{display:inline-block;background:#d4d4d4;color:#444;line-height:40px;width:60px;font-weight:bold;text-align:center;float:left;border-radius:3px} -#bo_v_sns {margin:0 0 20px;padding:0;list-style:none;zoom:1} +.btn_share{display:none;} +.bo_v_snswr{position:relative;float:right} +#bo_v_sns {;padding:0;list-style:none;zoom:1} #bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""} -#bo_v_sns li {float:left;margin:0 5px 0 0} +#bo_v_sns li {float:left;width:50px;text-align:center;margin-left:3px} +#bo_v_sns li a{height:40px;padding:10px 0;} +#bo_v_sns li .sns_f{display:block;background:#415b92;border-radius:3px} +#bo_v_sns li .sns_t{display:block;background:#35b3dc;border-radius:3px} +#bo_v_sns li .sns_g{display:block;background:#d5503a;border-radius:3px} +#bo_v_sns li .sns_k{display:block;background:#fbe300;border-radius:3px} +#bo_v_sns li img{vertical-align:top} /* 게시판 댓글 */ -#bo_vc {margin:0 0 20px;padding:20px 10px 10px;border:1px solid #e5e8ec;background:#f5f8f9} -#bo_vc h2 {margin-bottom:5px} -#bo_vc article {padding:0 0 5px;border-top:1px dotted #ccc} -#bo_vc header {position:relative;padding:13px 0 5px} -#bo_vc header .icon_reply {position:absolute;top:13px;left:-20px} +.cmt_btn{background:url('./img/cmt_btn.png') no-repeat right 8px;text-align:left ;width:100% ;border:0;color:#ed6478;font-weight:bold;font-size:1.167em;margin: 20px 0 10px;padding:0 0 10px ;border-bottom:1px solid #e8e8e8} +.cmt_btn_op{background:url('./img/cmt_btn.png') no-repeat right -23px} + +#bo_vc {} +#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#bo_vc article {margin:0 0 15px} +#bo_vc header {position:relative;padding:0 0 0 50px;height:40px;line-height:20px} +#bo_vc .comment_profile_img{position:absolute;top:0;left:0} +#bo_vc .comment_profile_img img, #bo_vc .profile_img img{border-radius:50%} #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold} -.bo_vc_hdinfo {display:inline-block;margin:0 10px 0 5px} +.bo_vc_hdinfo {display:inline-block;color:#777;font-style:italic} #bo_vc h1 {width:0;height:0;font-size:0;line-height:0;overflow:hidden} -#bo_vc a {color:#000;text-decoration:none} -#bo_vc p {padding:0 0 5px;line-height:1.8em} +#bo_vc .cmt_contents {padding:10px 15px ;margin:5px 0 0 ;border-radius:5px;background:#f6f6f6;line-height:1.8em} +#bo_vc .cmt_contents p{font-size:1.083em} #bo_vc p a {text-decoration:underline} -#bo_vc p a.s_cmt {text-decoration:none} +#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479} #bo_vc_empty {margin:0;padding:15px !important;text-align:center} #bo_vc #bo_vc_winfo {float:left} #bo_vc footer {zoom:1} #bo_vc footer:after {display:block;visibility:hidden;clear:both;content:""} -.bo_vc_act {float:right;margin:0;list-style:none} +.bo_vc_act {text-align:right;;margin:0;list-style:none} .bo_vc_act:after {display:block;visibility:hidden;clear:both;content:""} -.bo_vc_act li {float:left;margin-left:5px} +.bo_vc_act li {display:inline-block;margin:0 2px} +.bo_vc_act li a{color:#3497d9;text-decoration:underline} -#bo_vc_w {position:relative;margin-bottom:10px;padding:0 10px 15px;border-bottom:1px solid #dde4e9} -#bo_vc_w h2 {padding:10px 0 5px} -#bo_vc_w .tbl_wrap {margin:0 0 15px} -#bo_vc_w #char_cnt {display:block;margin-bottom:5px} -#bo_vc_w textarea {width:99%} +.bo_vc_w {position:relative;margin:10px 0;display:block;} +.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +.bo_vc_w #char_cnt {display:block;margin:0 0 5px} +.bo_vc_w textarea{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px} +#wr_secret{} +.bo_vc_w_info{margin:5px 0} +.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w_info .frm_input{float:left;;width:49.5%;margin: 0 0 5px 0} +.bo_vc_w_info #wr_password{float:right;} +.bo_vc_w_info #captcha{;display:block;clear:both} +.bo_vc_w .btn_confirm{margin-top:5px;clear:both} +.bo_vc_w .icon_lock{display:inline-block;font-size:17px;padding: 5px;margin-right:5px;} +.bo_vc_w .btn_submit{height:50px;width:100%;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em;} +.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""} +.bo_vc_w .bo_vc_secret{float:right;display:block;} -#bo_vc_sns {margin:0;padding:0;list-style:none;zoom:1} +#bo_vc_send_sns{display:block;float:left} +#bo_vc_sns {display:block;margin:0;padding:0;list-style:none;zoom:1} #bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""} -#bo_vc_sns li {float:left;margin:0 10px 0 0} -#bo_vc_sns input {margin:0 0 0 5px} \ No newline at end of file +#bo_vc_sns li {float:left;margin:0 5px 0 0} +#bo_vc_sns .sns_li_f{border-radius:3px;background:#3a589b;height:40px;;padding: 10px 0 10px 10px} +#bo_vc_sns .sns_li_t{border-radius:3px;background:#00aced;height:40px;;padding: 10px 0 10px 10px} +#bo_vc_sns .sns_li_off{background:#bbb} +#bo_vc_sns a{display:inline-block;padding:0 15px 0 5px;} +#bo_vc_sns input {margin:0 5px 0 0 } + +/*글쓰기*/ +#bo_w .bo_w_select select{border:1px solid #3497d9;background:#fff;width:100%} +#bo_w .bo_w_link label{position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;background:#eee;text-align:center} +#bo_w .bo_w_link .frm_input{padding-left:50px} +#bo_w .bo_w_flie .lb_icon{position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;background:#eee;text-align:center} +#bo_w .bo_w_flie .frm_file{padding-left:50px;} +#bo_w .bo_w_flie .file_wr{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0} +#bo_w .bo_w_flie .frm_input{margin:5px 0 0 } + diff --git a/theme/basic/mobile/skin/board/basic/view.skin.php b/theme/basic/mobile/skin/board/basic/view.skin.php index d8f85841d..69490ffb2 100644 --- a/theme/basic/mobile/skin/board/basic/view.skin.php +++ b/theme/basic/mobile/skin/board/basic/view.skin.php @@ -8,112 +8,46 @@ add_stylesheet('', 0 -
    + +
    -

    +

    + + + + -

    + ?> + +

    작성일

    페이지 정보

    - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 조회 + 댓글
    - - - -
    -

    첨부파일

    - -
    - - - - - -
    - - - +
    + +

    댓글목록

    @@ -23,54 +25,53 @@ var char_max = parseInt(); // 최대 ?>
    style="margin-left:px;border-top-color:#e0e0e0">
    -

    님의 댓글

    - - 댓글의 댓글 +

    님의 댓글의 댓글

    + + - 아이피 - + 아이피 + () - 작성일 +
    + 작성일
    +
    + +

    + "; ?> + +

    - -

    - "; ?> - -

    + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
    + + "> - - -

    등록된 댓글이 없습니다.

    @@ -83,7 +84,7 @@ var char_max = parseInt(); // 최대 ?> @@ -259,7 +246,10 @@ var char_max = parseInt(); // 최대 function comment_box(comment_id, work) { - var el_id; + var el_id, + form_el = 'fviewcomment', + respond = document.getElementById(form_el); + // 댓글 아이디가 넘어오면 답변, 수정 if (comment_id) { @@ -276,11 +266,13 @@ var char_max = parseInt(); // 최대 if (save_before) { document.getElementById(save_before).style.display = 'none'; - document.getElementById(save_before).innerHTML = ''; } document.getElementById(el_id).style.display = ''; - document.getElementById(el_id).innerHTML = save_html; + document.getElementById(el_id).appendChild(respond); + //입력값 초기화 + document.getElementById('wr_content').value = ''; + // 댓글 수정 if (work == 'cu') { @@ -311,15 +303,26 @@ var char_max = parseInt(); // 최대 comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님) - // sns 등록 $(function() { + // sns 등록 $("#bo_vc_send_sns").load( "/view_comment_write.sns.skin.php?bo_table=", function() { save_html = document.getElementById('bo_vc_w').innerHTML; } ); + + + }); + + $(function() { + //댓글열기 + $(".cmt_btn").click(function(){ + $(this).toggleClass("cmt_btn_op"); + $("#bo_vc").toggle(); + }); + }); diff --git a/theme/basic/mobile/skin/board/basic/write.skin.php b/theme/basic/mobile/skin/board/basic/write.skin.php index aa5f5b4ad..31e01e4cf 100644 --- a/theme/basic/mobile/skin/board/basic/write.skin.php +++ b/theme/basic/mobile/skin/board/basic/write.skin.php @@ -6,8 +6,6 @@ add_stylesheet('', 0 ?>
    -

    -
    @@ -51,115 +49,113 @@ add_stylesheet('', 0 echo $option_hidden; ?> -
    - - - +
    +

    + + +
    + + +
    + + -
    - - - +
    + + +
    - - - - +
    + + class="frm_input full_input " maxlength="20" placeholder="비밀번호"> +
    - - - - +
    + + +
    - - - - +
    + + +
    - - - - +
    + 옵션 + +
    - - - - - - +
    + + +
    - - - - +
    + + + +

    이 게시판은 최소 글자 이상, 최대 글자 이하까지 글을 쓰실 수 있습니다.

    + + + + +
    글자
    + +
    - - - - - - - - + + - - - - +
    +
    + + +
    + + + + + + + + + + +
    - - - - - + +
    + 자동등록방지 + + +
    - -
    class="frm_input " maxlength="20">
    옵션
    - -
    - - -

    이 게시판은 최소 글자 이상, 최대 글자 이하까지 글을 쓰실 수 있습니다.

    - - - - -
    글자
    - -
    " id="wr_link" class="frm_input wr_link">
    파일 # - - - - - - - -
    자동등록방지 - -
    -
    - +
    취소 +
    diff --git a/theme/basic/mobile/skin/board/gallery/list.skin.php b/theme/basic/mobile/skin/board/gallery/list.skin.php index 598b13675..9248df798 100644 --- a/theme/basic/mobile/skin/board/gallery/list.skin.php +++ b/theme/basic/mobile/skin/board/gallery/list.skin.php @@ -8,7 +8,13 @@ add_stylesheet('', 0 -

    목록

    + + +
    @@ -22,19 +28,9 @@ add_stylesheet('', 0 -
    -
    - Total - 페이지 -
    - - - - +
    + 전체 + 페이지
    @@ -60,47 +56,49 @@ add_stylesheet('', 0
  • - - - - - - 열람중"; - else - echo $list[$i]['num']; - ?> - - + 작성자 +
    + 조회 + 추천 + 비추천 + 작성일 +
    +
  • +
    게시물이 없습니다."; } ?> @@ -130,29 +130,20 @@ add_stylesheet('', 0
      -
    • 목록
    • +
    • 목록
    • -
    • -
    • -
    • +
    • +
    • +
    - -
    -
    -
    - - - - - - + echo ''.PHP_EOL; + } + ?> + + + 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. + +
    + 본인확인성인인증 완료 +
    + + + - - - - +
  • + + + + 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    + 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. +
    + + + + +
  • - - - - + + + - - - - +
  • + + " maxlength="255" placeholder="홈페이지"> +
  • - - - - +
  • + + " maxlength="20" placeholder="전화번호"> +
  • - - - - +
  • + + + class="frm_input full_input " maxlength="20" placeholder="휴대폰번호"> + + + + +
  • - - - - +
  • + 주소필수 + + class="frm_input " size="5" maxlength="6" placeholder="우편번호"> +
    + + class="frm_input frm_address " size="50" placeholder="주소">
    + + +
    + + + + +
  • -
    개인정보 입력
    - - 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. - - class="frm_input "> - 아이핀 본인확인'.PHP_EOL; - if($config['cf_cert_hp']) - echo ''.PHP_EOL; +
    + +

    개인정보 입력

    +
  • + + class="frm_input full_input " placeholder="이름"> + 아이핀 본인확인'.PHP_EOL; + if($config['cf_cert_hp'] && $config['cf_cert_hp'] != 'lg') + echo ''.PHP_EOL; - echo ''.PHP_EOL; - } - ?> - -
    - 본인확인성인인증 완료 -
    - -
  • - - 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    - 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. -
    - - - -
    +
  • + + @@ -104,155 +99,170 @@ add_stylesheet('', - -
  • " maxlength="255" >
    " maxlength="20" >
    - class="frm_input " maxlength="20"> - - - -
    - 주소 - 필수 - - - class="frm_input " size="5" maxlength="6"> -
    - - class="frm_input frm_address " size="50">
    - - -
    - - - -
    -
    - - +
    + +

    기타 개인설정

    -
    - - - +
  • + + +
  • - - - - +
  • + + +
  • = $config['cf_icon_level']) { ?> - - - - +
  • + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + 회원아이콘 + + + + +
  • - - - - + = $config['cf_icon_level'] && $config['cf_member_img_size'] && $config['cf_member_img_width'] && $config['cf_member_img_height']) { ?> +
  • + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + 회원아이콘 + + + + +
  • + + +
  • + + >정보 메일을 받겠습니다. + +
  • - - - - + + - - - - +
  • + + > + 다른분들이 나의 정보를 볼 수 있도록 합니다. + + 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. + + + +
  • - - - - +
  • + 정보공개 + + + + 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    + 이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다. +
    + +
  • + + - - - - +
  • + + +
  • - - - - -
    기타 개인설정
    - - 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    - gif만 가능하며 용량 바이트 이하만 등록됩니다. -
    - - - 회원아이콘 - - - -
    - > - 정보 메일을 받겠습니다. -
    - > +
  • + + + > 휴대폰 문자메세지를 받겠습니다. -
  • - - 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. - - - > - 다른분들이 나의 정보를 볼 수 있도록 합니다. -
    정보공개 - - 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    - 이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다. -
    - -
    자동등록방지
    +
  • + 자동등록방지 + +
  • +
    -
    - +
    취소 +
    @@ -288,10 +298,6 @@ add_stylesheet('', $cert_url = G5_KCPCERT_URL.'/kcpcert_form.php'; $cert_type = 'kcp-hp'; break; - case 'lg': - $cert_url = G5_LGXPAY_URL.'/AuthOnlyReq.php'; - $cert_type = 'lg-hp'; - break; default: echo 'alert("기본환경설정에서 휴대폰 본인확인 설정을 해주십시오");'; echo 'return false;'; @@ -410,16 +416,26 @@ add_stylesheet('', } - if (typeof f.mb_icon != 'undefined') { + if (typeof f.mb_icon != "undefined") { if (f.mb_icon.value) { - if (!f.mb_icon.value.toLowerCase().match(/.(gif)$/i)) { - alert('회원아이콘이 gif 파일이 아닙니다.'); + if (!f.mb_icon.value.toLowerCase().match(/.(gif|jpe?g|png)$/i)) { + alert("회원아이콘이 이미지 파일이 아닙니다."); f.mb_icon.focus(); return false; } } } + if (typeof f.mb_img != "undefined") { + if (f.mb_img.value) { + if (!f.mb_img.value.toLowerCase().match(/.(gif|jpe?g|png)$/i)) { + alert("회원이미지가 이미지 파일이 아닙니다."); + f.mb_img.focus(); + return false; + } + } + } + if (typeof(f.mb_recommend) != 'undefined' && f.mb_recommend.value) { if (f.mb_id.value == f.mb_recommend.value) { alert('본인을 추천할 수 없습니다.'); diff --git a/theme/basic/mobile/skin/member/basic/register_result.skin.php b/theme/basic/mobile/skin/member/basic/register_result.skin.php index 44ebe9dd4..fb677f0c1 100644 --- a/theme/basic/mobile/skin/member/basic/register_result.skin.php +++ b/theme/basic/mobile/skin/member/basic/register_result.skin.php @@ -4,41 +4,42 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 // add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨 add_stylesheet('', 0); ?> +
    +

    회원가입이 완료되었습니다.

    +
    +

    + 님의 회원가입을 진심으로 축하합니다.
    +

    -
    + +

    + 회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    + 발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. +

    +
    + 아이디 +
    + 이메일 주소 + +
    +

    + 이메일 주소를 잘못 입력하셨다면, 사이트 관리자에게 문의해주시기 바랍니다. +

    + -

    - 님의 회원가입을 진심으로 축하합니다.
    -

    +

    + 회원님의 비밀번호는 아무도 알 수 없는 암호화 코드로 저장되므로 안심하셔도 좋습니다.
    + 아이디, 비밀번호 분실시에는 회원가입시 입력하신 이메일 주소를 이용하여 찾을 수 있습니다. +

    - -

    - 회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    - 발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. -

    -
    - 아이디 -
    - 이메일 주소 - +

    + 회원 탈퇴는 언제든지 가능하며 일정기간이 지난 후, 회원님의 정보는 삭제하고 있습니다.
    + 감사합니다. +

    -

    - 이메일 주소를 잘못 입력하셨다면, 사이트 관리자에게 문의해주시기 바랍니다. -

    - - -

    - 회원님의 비밀번호는 아무도 알 수 없는 암호화 코드로 저장되므로 안심하셔도 좋습니다.
    - 아이디, 비밀번호 분실시에는 회원가입시 입력하신 이메일 주소를 이용하여 찾을 수 있습니다. -

    - -

    - 회원 탈퇴는 언제든지 가능하며 일정기간이 지난 후, 회원님의 정보는 삭제하고 있습니다.
    - 감사합니다. -

    diff --git a/theme/basic/mobile/skin/member/basic/scrap.skin.php b/theme/basic/mobile/skin/member/basic/scrap.skin.php index ccb43bac5..6ba0a162c 100644 --- a/theme/basic/mobile/skin/member/basic/scrap.skin.php +++ b/theme/basic/mobile/skin/member/basic/scrap.skin.php @@ -5,13 +5,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_stylesheet('', 0); ?> -
    +

    -
      +
      • - + 삭제
      • @@ -22,6 +22,6 @@ add_stylesheet('',
        - +
    diff --git a/theme/basic/mobile/skin/member/basic/scrap_popin.skin.php b/theme/basic/mobile/skin/member/basic/scrap_popin.skin.php index 04dfd5fd3..1b3fc792b 100644 --- a/theme/basic/mobile/skin/member/basic/scrap_popin.skin.php +++ b/theme/basic/mobile/skin/member/basic/scrap_popin.skin.php @@ -5,35 +5,34 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_stylesheet('', 0); ?> -
    +

    스크랩하기

    + +
    +

    제목 확인 및 댓글 쓰기

    +
      +
    • + 제목 + +
    • +
    • + + +
    • +
    + +

    + 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. +

    -
    - - - - - - - - - - - - -
    제목 확인 및 댓글 쓰기
    제목
    +
    + +
    -

    - 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. -

    - -
    - -
    \ No newline at end of file diff --git a/theme/basic/mobile/skin/member/basic/style.css b/theme/basic/mobile/skin/member/basic/style.css index 60bd23600..7d2123881 100644 --- a/theme/basic/mobile/skin/member/basic/style.css +++ b/theme/basic/mobile/skin/member/basic/style.css @@ -1,7 +1,9 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* ### 기본 스타일 커스터마이징 시작 ### */ +.mbskin{text-align:center;padding:10px} +.mbskin h1{font-size:1.75em;margin:40px 0 25px} +.mbskin p {padding-bottom:20px;border-bottom:1px solid #c8c8c8} +.mbskin p strong{color:#4162ff;padding-bottom:5px;display:block;font-size:1.083em} /* 버튼 */ .mbskin a.btn01 {} @@ -73,123 +75,168 @@ /* ### 기본 스타일 커스터마이징 끝 ### */ /* 회원가입 약관 */ -#fregister section {padding:15px;border-bottom:1px solid #eee;background:#fafafa} -#fregister h2 {margin:0 0 15px;text-align:center} -#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:99%;height:150px;border:1px solid #cfded8;background:#f7f7f7} -.fregister_agree {padding:10px 0 0;text-align:right} +#fregister section {background:#fff;margin:10px 0;border:1px solid #dbdbdb; +-webkit-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +-moz-box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2); +box-shadow: 2px 2px 3px 0px rgba(0,0,0,0.2);} +#fregister .chk_all{text-align:left} +#fregister h2 {text-align:left;border-bottom:1px solid #dbdbdb;padding:10px 15px;line-height:1.7em;font-size:1.167em} +#fregister textarea {display:block;padding:10px;width:100%;border:0;background:#fff;height:180px;line-height:1.5em;color:#555} +.fregister_agree {border-top:1px solid #dbdbdb;padding:10px 15px;line-height:1.7em;text-align:left;font-size:1.083em} .fregister_agree label {display:inline-block;margin-right:5px} -#fregister p {color:#e8180c;text-align:center} +#fregister p {border:0;padding:0 0 5px;} #fregister .btn_confirm {margin:15px 0} -#fregister_private .tbl_head01 {margin:0} -#fregister_private .tbl_head01 th{;text-align:center;border:1px solid #d1dee2;width:33%} -#fregister_private .tbl_head01 td {border:1px solid #e9e9e9;background:#fff} +#fregister_private .tbl_head01 {padding:20px;margin:0} #fregister_private .tbl_head01 caption{position:absolute;font-size:0;line-height:0;overflow:hidden;top:0;color:#fff} /* 회원가입 입력 */ #fregisterform #reg_mb_email, #fregisterform .frm_address {width:100%} - #fregisterform textarea {width:100%;height:50px} - #fregisterform #msg_certify {margin:5px 0 0;padding:5px;border:1px solid #dbecff;background:#eaf4ff;text-align:center} - #fregisterform .frm_address {margin:5px 0 0} #fregisterform #mb_addr3 {display:block;margin:5px 0 0} #fregisterform #mb_addr_jibeon {display:block;margin:5px 0 0} +#fregisterform .form_01{margin-bottom: 30px} +#fregisterform .form_01 h2{font-size:1.167em;margin:0 0 5px} +#fregisterform .frm_label{display:block;font-size:1.083em;margin:15px 0 5px;color:#555} +#fregisterform .btn_frmline {height:40px;padding:0 10px} +#fregisterform .rgs_name_li button{margin:5px 0 0 } +#fregisterform .reg_mb_img_file img{max-width:100%;height:auto} /* 회원가입 완료 */ -#reg_result {padding:40px 10px 0} +#reg_result {padding:20px 10px 10px} #reg_result #result_email {margin:20px 0;padding:10px 50px;border-top:1px solid #eee;border-bottom:1px solid #eee;background:#fff;line-height:2em} #reg_result #result_email span {display:inline-block;width:150px} #reg_result #result_email strong {color:#e8180c;font-size:1.2em} -#reg_result p {line-height:1.8em} -#reg_result .btn_confirm {margin:50px 0} +#reg_result h2{text-align:center;font-size:1.25em;margin:0 0 10px} +#reg_result h2 strong{color:#ed6478} +#reg_result p {line-height:1.7em} +#reg_result .btn_confirm {margin:20px 0 30px} +#reg_result .reg_result_wr{background:#fff;padding:10px 20px} +#reg_result .reg_cong{margin:10px 0;font-size:1.083em;font-weight:bold} +#reg_result .reg_cong strong{color:#3497d9} +#reg_result .btn_confirm a{display:inline-block;padding:0 20px;height:40px;line-height:38px;border:1px solid #ed6478;color:#ed6478;border-radius:3px;font-weight:bold} /* 아이디/비밀번호 찾기 */ -#find_info #info_fs {margin:0 20px 10px} -#find_info #info_fs p {margin:0 0 10px;line-height:1.8em} +/*#find_info #info_fs {margin:0 20px 10px}*/ +#find_info #info_fs p {margin:0 0 10px;line-height:1.5em;font-size:0.92em;color:#4162ff} #find_info #info_fs #mb_email {width:100%} -#find_info #captcha {margin:0 20px;padding:0 0 10px} -#find_info #captcha input {margin-left:5px} +#find_info #captcha{margin:5px 0 } /* 로그인 */ -#mb_login {margin:20px 0} -#mb_login h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} +#mb_login {margin:40px auto 10px;;max-width:500px;padding:20px;} +#mb_login h1 {font-size:2em;text-align:center;margin:0 0 20px} #mb_login h2 {margin:0} #mb_login p {padding:10px 0;line-height:1.5em} -#mb_login #login_frm {position:relative;padding:0 5px;font-size:1em} -#mb_login #login_frm div {padding:10px 0 0;text-align:right} -#mb_login .frm_input {display:block;margin-bottom:5px;padding:0;width:81%;height:1.8em;line-height:1.8em} -#mb_login .btn_submit {position:absolute;top:0;right:5px;padding:0 !important;width:18%;height:4.3em !important;text-align:center} -#mb_login section {margin:30px 0;padding:15px 10px;border:1px solid #cfded8;background:#f7f7f7} -#mb_login section div {text-align:right} +#mb_login #login_frm {position:relative} +#mb_login #login_frm div {padding:10px 0 ;text-align:right} +#mb_login .frm_input {width:100%;margin:5px 0} +#mb_login .btn_submit {width:100%;border-radius:3px;height:40px;margin:5px 0;font-size:1.083em;font-weight:bold} +#mb_login .mb_login_join{border-top:1px solid #ddd;margin:20px 0 0 ;padding:10px 0} +#mb_login .mb_login_join:after {display:block;visibility:hidden;clear:both;content:""} +#mb_login .mb_login_join h2{position:absolute;font-size:0;line-height:0;overflow:hidden} +#mb_login .mb_login_join a{display:block;float:left;width:50%;} +#login_password_lost{border-right:1px solid #cdcdcd;} +#flogin{background:#fff;padding:20px;margin:20px 0;border-bottom:1px solid #ddd;} + +#mb_login_notmb{background:#fff;border-bottom:1px solid #ccc;padding:20px;} +#mb_login_notmb h2{font-size:1.25em;padding:10px;background:#f3f3f3} +#mb_login_notmb p{border:0;padding:0;margin:10px;color:#} +#guest_privacy p{border:1px solid #ddd;background:#fff;color:#666;min-height:20px;height:200px;padding:10px;text-align:left;overflow-y:auto;margin:10px 0} +#mb_login_notmb .btn_submit{width:100%;display:block;height:40px;line-height:40px} + +#mb_login_od_wr{background:#fff;border-bottom:1px solid #ccc;padding:20px;} +#mb_login_od_wr p{border:0;text-align:left;} +#mb_login_od_wr p strong{display:inline} +#mb_login_odinfo{margin:10px 0 0 ;background:#f3f3f3;padding:10px} +#mb_login_odinfo h2{font-size:1.167em} /* 쪽지 */ -#memo_view_contents {margin:0 auto 20px;width:90%} -#memo_view_contents h1 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#memo_view_ul {margin:0;padding:0 0 10px;border-bottom:1px solid #eee;list-style:none} -.memo_view_li {position:relative;padding:5px 0} -.memo_view_subj {display:inline-block;width:65px} +#memo_view_contents {} +#memo_view_contents h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#memo_view_ul {margin:0 0 3px;background:#fff;padding:5px 10px;border-radius:3px; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} +.memo_view_li {position:relative;padding:2px 0} +.memo_view_subj {display:inline-block;width:60px;font-size:0.92em;color:#777} #memo_view_ul a {} -#memo_view p {padding:10px 0;min-height:150px;height:auto !important;height:150px;line-height:1.8em} +#memo_view p {padding:10px 15px;border-radius:3px;;min-height:150px;height:auto !important;height:150px;line-height:1.8em;background:#fff; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} -#memo_list_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#memo_list_ul li {position:relative;padding:10px 0;border-bottom:1px solid #e9e9e9} -#memo_list_ul .memo_link {} -#memo_list_ul .memo_send {display:block;margin-top:4px} -#memo_list_ul .memo_send a{color:#777} -#memo_list_ul .memo_read {font-size:0.95em;color:#666} -#memo_list_ul .memo_del {position:absolute;top:10px;right:0} +#memo_list_ul {} +#memo_list_ul li {position:relative;background:#fff;margin:10px 0;border-radius:3px;padding:10px 15px; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} -#memo_write #me_recv_mb_id {width:98%} -#memo_write textarea {width:99%;height:100px} +#memo_list_ul .memo_link {display:block;font-weight:bold;font-size:1.083em;margin:0 0 5px} +#memo_list_ul .memo_date{font-size:0.92em;color:#777;font-style:italic} +#memo_list_ul .memo_del{display:block;position:absolute;top:0;right:0;width:40px;height:40px;background:url(./img/btn_del.gif) no-repeat 50% 50%; text-indent:-9999px;overflow:hidden} + +#memo_write #me_recv_mb_id {width:100%} +#memo_write textarea {width:100%;height:100px} +#memo_write .win_btn{margin:10px;} /* 스크랩 */ -#scrap_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#scrap_ul li {position:relative;padding:10px 35px 10px 0;border-bottom:1px solid #e9e9e9} -#scrap_ul .scrap_board {display:inline-block;margin:0 10px 0 0;font-weight:bold} -#scrap_ul .scrap_del {position:absolute;top:10px;right:0} - -#scrap_do table {margin:0 0 10px;width:100%} -#scrap_do textarea {width:99%;height:100px} +#scrap_ul li{position:relative;} +#scrap_ul .scrap_board {display:block;color:#4162ff;margin:0 0 5px} +#scrap_ul .scrap_del {display:block;position:absolute;top:0;right:0;width:40px;height:40px;background:url(./img/btn_del.gif) no-repeat 50% 50%; text-indent:-9999px;overflow:hidden} +#scrap_ul .scrap_link{font-weight:bold;font-size:1.083em;} +.scrap_tit{font-weight:bold;border-bottom:1px solid #d7d7d7;padding:0 0 10px;font-size:1.167em} +#scrap_do #wr_content{margin-top:5px} +#scrap_do label{color:#666} /* 포인트 */ -#point_ul {margin:0 20px;padding:0;border-top:1px solid #e9e9e9;list-style:none} -#point_ul li {position:relative;padding:10px 0;border-bottom:1px solid #e9e9e9} -#point_ul .point_wrap01 {position:relative;padding:0 0 0 90px} -#point_ul .point_wrap02 {margin:7px 0 0;text-align:right} -#point_ul .point_date {position:absolute;top:0;left:0} +#point_ul {;padding:0;border-top:1px solid #e9e9e9;list-style:none} +#point_ul li {position:relative;} +#point_ul li:after {display:block;visibility:hidden;clear:both;content:""} +#point_ul .point_wrap01 {float:left} +#point_ul .point_wrap02 {float:right;text-align:right} +#point_ul .point_log{display:block;font-weight:bold;margin:0 0 5px;font-size:1.083em} +#point_ul .point_inout{display:block;font-weight:bold;margin:0 0 5px;color:#4162ff;font-size:1.083em} +#point_ul .point_date{font-style:italic} -#point_sum {margin:0 20px} -#point_sum .sum_row {margin:0 0 1px;background:#f2f5f9} -#point_sum .sum_row:after {display:block;visibility:hidden;clear:both;content:''} +#point_sum{margin:10px 0 20px} +#point_sum:after {display:block;visibility:hidden;clear:both;content:''} +#point_sum .sum_row {float:left;width:33.333%;text-align:center;background:#939db8;color:#fff;} +#point_sum .sum_row:nth-child(even){background:#8490af} #point_sum .sum_tit, #point_sum .sum_val {display:block;margin:0 0 1px;padding:10px} -#point_sum .sum_tit {clear:both;float:left;width:100px} -#point_sum .sum_val {float:right} +#point_sum .sum_tit {} +#point_sum .sum_val {} /* 회원 비밀번호 확인 */ #mb_confirm {margin:30px 0} #mb_confirm h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} #mb_confirm p {padding:15px 10px;border-bottom:1px solid #cfded8;border-bottom:0;background:#fff} #mb_confirm p strong {display:block} -#mb_confirm fieldset {position:relative;margin:0 0 5px;padding:20px 10px;border-bottom:1px solid #cfded8;background:#f7f7f7} -#mb_confirm_pw {display:block;margin-top:10px;padding:0;width:88%;line-height:1.8em !important} -#mb_confirm .btn_submit {position:absolute;bottom:20px;right:10px;width:10%;height:1.9em !important;line-height:1.9em} +#mb_confirm fieldset {position:relative;margin:20px 0;text-align:left;color:#555} +#mb_confirm_id{font-weight:bold;display:block;font-size:1.083em;margin:5px 0} +#mb_confirm_pw {display:block;margin-top:10px;width:100%} +#mb_confirm .btn_submit {width:100%;height:40px;border-radius:3px;margin:10px 0} /* 비밀글 비밀번호 확인 */ -#pw_confirm {margin:30px 0} -#pw_confirm h1 {margin:0 0 15px;padding:0 10px;font-size:1.3em} -#pw_confirm p {padding:15px 10px;border-bottom:1px solid #cfded8;border-bottom:0;background:#fff} -#pw_confirm p strong {display:block} -#pw_confirm fieldset {position:relative;margin:0 0 5px;padding:5px 5px 10px;border-bottom:1px solid #cfded8;background:#f7f7f7} -#pw_wr_password {display:block;margin-top:10px;padding:0;width:88%;line-height:1.8em !important} -#pw_confirm .btn_submit {position:absolute;bottom:10px;right:5px;width:10%;height:1.9em !important;line-height:1.9em} +#pw_confirm fieldset {position:relative;margin:0 0 5px;padding:15px 0;border-top:1px solid #fffefe} +#pw_wr_password {width:100%} +#pw_confirm .btn_submit {margin:5px 0;width:100%;border-radius:3px;height:45px;font-weight:bold;font-size:1.083em} /* 폼메일 */ -#formmail #subject {width:98%} -#formmail textarea {width:99%;height:100px} +#formmail #subject {width:100%} +#formmail textarea {width:100%;height:100px} +#formmail .frm_file{padding-left:50px;} +#formmail .file_wr{border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;} +#formmail .lb_icon{position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;overflow:hidden;text-indent:-999px;background:url(./img/icon_file.gif) no-repeat 50% 50% #eee} /* 자기소개 */ -#profile table {margin-bottom:0} -#profile section {padding:10px 20px} +#profile section {margin:10px; } #profile h2 {margin:0} -#profile .sv_wrap a {margin:0 0 5px;padding:0;font-weight:bold;line-height:10px} \ No newline at end of file +#profile .sv_wrap a {color:#fdff2f} +#profile table{width:100%;border-collapse:collapse} +#profile table th{background:#fff;padding:10px;width:90px;text-align:left;border-bottom:1px solid #eee} +#profile table td{background:#fff;padding:10px;border-bottom:1px solid #eee} +#profile p{background:#fff;padding:10px;margin:10px 0; +-webkit-box-shadow: 0 0 5px rgba(50,50,50,0.2); +-moz-box-shadow: 0 0 5px rgba(50,50,50,0.2); +box-shadow: 0 1px 5px rgba(50,50,50,0.2);} \ No newline at end of file diff --git a/theme/basic/mobile/skin/new/basic/new.skin.php b/theme/basic/mobile/skin/new/basic/new.skin.php index 9055d2b52..e7263f92f 100644 --- a/theme/basic/mobile/skin/new/basic/new.skin.php +++ b/theme/basic/mobile/skin/new/basic/new.skin.php @@ -16,8 +16,8 @@ add_stylesheet('', 0);
    + + +
    - - - - - -
    -

    연락처정보

    -
    - -
    이메일
    -
    - - -
    휴대폰
    -
    - -
    -
    - - +
    -
    -

    본문

    - - \n"; - - for ($i=0; $i<$view['img_count']; $i++) { - //echo $view['img_file'][$i]; - echo get_view_thumbnail($view['img_file'][$i], $qaconfig['qa_image_width']); - } - - echo "
    \n"; - } - ?> - - -
    - - - - - - - - ', 0);

    연관질문

    -
    - - - - - - - - - - +
    + +
      -
    - - - - - - - -
    분류제목상태등록일
    - - - -
    + for($i=0; $i<$view['rel_count']; $i++) { + ?> +
  • +
    + + + + + +
    +
    + + +
    +
  • + +
    - -
    - -
    - + diff --git a/theme/basic/mobile/skin/qa/basic/write.skin.php b/theme/basic/mobile/skin/qa/basic/write.skin.php index adbcbdfbb..3d19ca931 100644 --- a/theme/basic/mobile/skin/qa/basic/write.skin.php +++ b/theme/basic/mobile/skin/qa/basic/write.skin.php @@ -27,92 +27,82 @@ add_stylesheet('', 0); echo $option_hidden; ?> -
    - - - - - - - - + + - - - - - - + +
  • + 옵션 + +
  • + - - - - - - + + - - - - - - + + - - - - +
  • + + +
  • - - - - +
  • + +
    + +
    +
  • - - - - +
  • +
    + 파일 #1 + + + + +
    +
  • - - - - +
  • +
    + 파일 #2 + + + + +
    +
  • - -
    +
    +
      + +
    • + -
    옵션
    - class="frm_input email" maxlength="100"> + +
  • + + class="frm_input full_input email" maxlength="100" placeholder="이메일"> > -
  • - class="frm_input" size="30"> + +
  • + + class="frm_input full_input" size="30" placeholder="휴대폰"> > 답변등록 SMS알림 수신 -
  • - -
    - -
    파일 #1 - - - - -
    파일 #2 - - - - -
    +
    -
    - - 목록 +
    + 목록 +
    diff --git a/theme/basic/mobile/skin/search/basic/search.skin.php b/theme/basic/mobile/skin/search/basic/search.skin.php index c1ae64ec8..d4229ec77 100644 --- a/theme/basic/mobile/skin/search/basic/search.skin.php +++ b/theme/basic/mobile/skin/search/basic/search.skin.php @@ -9,7 +9,7 @@ add_stylesheet('',
    상세검색 -
    +
    @@ -21,11 +21,10 @@ add_stylesheet('', -
    -
    + - - + + diff --git a/theme/basic/screenshot.png b/theme/basic/screenshot.png index 423a3993e322ca8e9d300249e51c3336deb8ac68..249f4c1345579f491530ed520a52937ea0b4969c 100644 GIT binary patch literal 36358 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 LNkvXXu0mjfdfJMW literal 11304 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 YuY;XbV-|^EfBl7%l~R(dmM{wbUw`rJHUIzs diff --git a/theme/basic/skin/board/basic/img/btn_next2.gif b/theme/basic/skin/board/basic/img/btn_next2.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ec94650a55df093e69afc30b366af38f10d4166 GIT binary patch literal 1898 zcmZ?wbhEHb^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$+|-gp zg^Jvqyke^gTcyO5{G?PXAR8pCucQE0Qj%?}vtM~P_^2{qPNz6-5^>ndS0-B(gnVDi`U})iN>1b)}>f&r-Xy|I@WZ-D*;%4aP z;$~!EX<}gv)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSu_6s_xI25Uq63* z|MvCE=T9F$ynpxh&Ffb$Up#;I^vUB#4%#K*+RD$;tWu|G(mY?g-xi1((E!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qXu2*iX zmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2NtnTP2`N zAzsKW@b!fooL8&|_K;q3ey)B+Vu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9lvsNTp{2Q{sk4i#fw7aJnUSH3Im`@fdL5nIoGnev9bH|VjSUT5&74duEnJ-~ zOpVN(UCd1koMC!B^NLFn^O93x_GSX@h3d7$tJli8C^fMpzbGU>KL?fq0y6ST@{2R_ z3lyA#%@j1kGxJjN%ZoKZ(F5_VOKMSOS!#+~QGTuhIDD-#vDj~HQ=>r|34@w+Ji3KJEOo1RKJm~{D@XV8%2h1@=z^uXe z|KHy~zkmJw@%`J^FP}es{P6zW+c&RYy?pWf+0!SFA3c0<|K8m@w{P9NasArWE0-@_ zym0>9*)yk4ojh^;*wG`04;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu+0rG8 z7cE>cf8N|VvuDkmF@4(9DU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8 zSdgEWo0FZDnUS8Bnv$H9m=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ4Mj8G>>2YWkP z8*3{|3v)A56JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp9 z4t6$H7G@?!1_s5SEI^WxL5BedKqU_YlSEH`1N*MMOf`JI(UE@9?*BYxf5e7lM6ohh F0{~W;oRI(k literal 0 HcmV?d00001 diff --git a/theme/basic/skin/board/basic/img/close_btn.png b/theme/basic/skin/board/basic/img/close_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..50e9f26efe0886d2b17fb435f1a1f2ca5398ab31 GIT binary patch literal 1147 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 qkCV?y5r00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/theme/basic/skin/board/basic/img/icon_file.gif b/theme/basic/skin/board/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/theme/basic/skin/board/basic/img/icon_good.png b/theme/basic/skin/board/basic/img/icon_good.png new file mode 100644 index 0000000000000000000000000000000000000000..69841a1340a76f2b4bfeb4a3a9e74b8a5846fe43 GIT binary patch literal 1288 zcmbVMZA{!`9Pfq1I3`QxTc&=n7KtP5t}l1(T`MO!+PiVnyJN>0&WwBEfC(!}ei*Fj>^OWDGN(0*8Je`(V?j z&)fg^`@eUnIk~f{^3h5JL8{_SLK@Cn-Er?d@cXp7a|uq5*wL)rqUY?QXaXc6>m2}% zt70ce15xgM@jR$Ukcym=$=cb(bDX5BKGBu&IjRBC2vXnR7@|}FHrfF?6)lWipZo$t z6*-Kx(g`AA@F1@=^_ifhFPV}03KA=04bPzU4hIQTV2h}uc54>rgs~M~4zAr}979(` z>_Qk@H7c8EMtR)?DDCrmC4wYThVhXBnqkNtC`FJIPQaJ(k^zopI4X#)Js8wx$~i7A z#MX4dT^P&Tw!z_eu~_sK{XX67#7UNAT@H%!LJ6PKqSU6p#T#VSU*WdnGnnRSt=SMLm@vyM))!|u35IINuaD(fqK`l z^j)zWZvxTQ&5W*hmn)z-uiLtn*A0|!VbJZZiYDtttJY1=s<#3#m6w1VGj$bRi7%&Y zpx;mNQ3?*CG0Ly_%|{4!*b2hKZZ{{_(Jop+76y-KXW$q_Xo-O%a=aC`cZ1WboBP*_w2RP7iz}1 zV^=nX_v6!qt#o-lU7Q+y{Qf8J%TJ%W{NCIhGTuZlyfwY$jBz-(>G0xL74Q7;`q;^^ zlKIAaa(kr{`;g;i@Po#IUir7dns1#{!}Otrh64j_??1->a;J+Je0g$qPisy6$NN4T zPqw!SQ$&}fX;VWZBX4r0V*ku*{d+e*Fwy!--PpjXRQ0HnPcMv*{Q2;5^>P0CkA>4u zBtqvLvG3W^1y4>o7}`fC^aW*U8M$=p`LEtQ*YwDiOn)&_i-FLfo-m9wo z`|J0u%&d1icYVEm_r>BxZ?|rFGGXHDwQFCm-*CUS=J$v9pH827v1swLIkVqv-S&FT znm60GKA$`H`~63^^YZTG=H0KWebV3eV)0@i<6e3B&6LzPTeklF^XuipMep|=`2YVu z17$$*CkrD3gBF7h$QY2H7}#PQLY*8Z>1a(npuSj&!C+2M$D^Au49rIzmu_NUkbT$K z@N|_DYcbb>j2Wy<#m#{VN6yADE^Oe)_z)w+$e|_7pjN@jAe_d}prOvK#K7Mmz^JUi QD9{kY$HvB2;mBYO0LU4C3IG5A literal 97 zcmZ?wbhEHbe)HzdzkmOpK7G1o&6@rD_kZ~C z0Z6`l`EvdG^($7a`10k;@87>SZ{B?6%9V{9H=a0gV&A@fKwYO#pT2+p{)-ncfKov2 zr%#`N;f!KYsiGiW~)lhIr>|74(23<(<=9yw$9#m#@ra2-+bRv!3%fd0dBQ?f)ODm;T_l^Ed4xq>LVCj3 U#2LJNXZi*?xy@tnaAdFs0Qg;*ivR!s literal 145 zcmZ?wbhEHbzHen|7VvwFnzUPlarEA ZqW~YXyUO~T+#YkUoJ%KCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/theme/basic/skin/board/basic/img/icon_lock.png b/theme/basic/skin/board/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; R(%cf16Zrr$W z{rdHjCr{3vJ$vQKmCv3%n>1@!i5WK)~q>x{P^O< zi?3e2x^LgUUAuPu`Sa)6wQGO>{=Iqg=C5DBwt~R}F!=xfKLeG3;!hSv1_pHo9guk- zKQXWs9GJXe!Gr(?hAx*t0V{byl?6c)-Q>=>GF;f9(9+?}ED$k=Bf9zd1Wy$s_Wnkn z84PU88y&a=9iSXMhSSOWmH3xI$C literal 62 zcmZ?wbhEHb3@AOMLlFzK}PuRQ&h|M0|xLCPCfS!F+{3@-DP f-?4DY(nWejQ)6d06;;oc{oQqepNC77mBAVS=eiro literal 71 zcmZ?wbhEHbZ% diff --git a/theme/basic/skin/board/basic/img/icon_reply.gif b/theme/basic/skin/board/basic/img/icon_reply.gif index 91c135977b4f445a90c849310dc80efde1983830..7fe2c65580ed22e254718fdd45ed93efb554672d 100644 GIT binary patch literal 1187 zcmZ?wbhEHbCgqow*eU^C z3h_d2fv+#z;Jjizu!r=L^Ke6^lgE!9KDdAH?w#AWZr-?l?dp}w zmo8p7f9~v=)2B|JIDYKtk;8`$9@xKc@1EVecJA1|ZR?iJn>KD(zi#cC)vH#nSiWrO zlEsS_E|@=W?wr}PX3m&CZR(WClO|5+@9XX9?&|DlZ)CJqCAJzX7bElmw|HB}X5B}D~!IawKLDM<-&F;Nj=AwdCtK3*Pf zE=~@1HdYp9CPoGZ#h)xdl954&0SG`P4+E1_OY=;&S8qgOKCNk!;0vz)T^YHC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/theme/basic/skin/board/basic/img/icon_share.png b/theme/basic/skin/board/basic/img/icon_share.png new file mode 100644 index 0000000000000000000000000000000000000000..6d64f625a32da82e5ae80ed050aa5da7122902c2 GIT binary patch literal 3064 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 hVCZu7y(G~QB)VQHjxXGLX~6%>', 0); ?> -

    목록

    -
    + + +
    +
    + Total + 페이지 +
    + + + + +
    + +
    @@ -161,33 +188,11 @@ add_stylesheet('', 0 + + - -
    - 게시물 검색 - -
    - - - - - - - - -
    -
    - -
    -

    +

    + + + + -

    + ?> +

    페이지 정보

    - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 댓글 + 조회 + 작성일 +
    - - - - -
    -

    첨부파일

    - -
    - - - - - - - - - - -
    - - - - - - - -
    - -

    본문

    @@ -154,19 +59,19 @@ add_stylesheet('', 0

    - - + + +
    - 스크랩 - 추천 + 추천 - 비추천 + 비추천 @@ -175,30 +80,128 @@ add_stylesheet('', 0 if($board['bo_use_good'] || $board['bo_use_nogood']) { ?>
    - 추천 - 비추천 + 추천 + 비추천
    - +
    +
    + 스크랩 + + +
    + + $cnt = 0; + if ($view['file']['count']) { + for ($i=0; $i + + + +
    +

    첨부파일

    +
      + +
    • + + + + + () + 회 다운로드 | DATE : +
    • + +
    +
    + + + + + + + + + + +
    + + + + + + + +
      +
    • 이전글
    • +
    • 다음글
    • +
    + + +
    + - -
    - -
    -
    @@ -253,6 +256,19 @@ $(function() { // 이미지 리사이즈 $("#bo_v_atc").viewimageresize(); + + //sns공유 + $(".btn_share").click(function(){ + $("#bo_v_sns").fadeIn(); + + }); + + $(document).mouseup(function (e) { + var container = $("#bo_v_sns"); + if (!container.is(e.target) && container.has(e.target).length === 0){ + container.css("display","none"); + } + }); }); function excute_good(href, $el, $tx) diff --git a/theme/basic/skin/board/basic/view_comment.skin.php b/theme/basic/skin/board/basic/view_comment.skin.php index 94cd090fa..a372ff01f 100644 --- a/theme/basic/skin/board/basic/view_comment.skin.php +++ b/theme/basic/skin/board/basic/view_comment.skin.php @@ -7,7 +7,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 var char_min = parseInt(); // 최소 var char_max = parseInt(); // 최대 - +

    댓글목록

    @@ -15,8 +15,7 @@ var char_max = parseInt(); // 최대 $cmt_amt = count($list); for ($i=0; $i<$cmt_amt; $i++) { $comment_id = $list[$i]['wr_id']; - $cmt_depth = ""; // 댓글단계 - $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 20; + $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50; $comment = $list[$i]['content']; /* if (strstr($list[$i]['wr_option'], "secret")) { @@ -29,54 +28,52 @@ var char_max = parseInt(); // 최대
    style="margin-left:px;border-top-color:#e0e0e0">
    -

    님의 댓글

    +

    님의 댓글의 댓글

    - 댓글의 댓글 - 아이피 - + 아이피 + () - 작성일 - + 작성일 +
    -

    - 비밀글 - -

    +
    +

    + 비밀글 + +

    + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
    + + " id="secret_comment_"> - - -

    등록된 댓글이 없습니다.

    @@ -89,9 +86,9 @@ var char_max = parseInt(); // 최대 $w = 'c'; ?> -
    @@ -155,34 +193,10 @@ add_stylesheet('', 0 + + - - -
    - 게시물 검색 - -
    - - - - - - - - -
    -
    - - -
    -

    +

    + + + + -

    + ?> +

    페이지 정보

    - 작성자 - 작성일 - 조회 - 댓글 + 작성자 + 댓글 + 조회 + 작성일 +
    - - - - -
    -

    첨부파일

    - -
    - - - - - - - - - - -
    - - - - - - - -
    - -

    본문

    @@ -154,19 +59,19 @@ add_stylesheet('', 0

    - - + + +
    - 스크랩 - 추천 + 추천 - 비추천 + 비추천 @@ -175,30 +80,128 @@ add_stylesheet('', 0 if($board['bo_use_good'] || $board['bo_use_nogood']) { ?>
    - 추천 - 비추천 + 추천 + 비추천
    - +
    +
    + 스크랩 + + +
    + + $cnt = 0; + if ($view['file']['count']) { + for ($i=0; $i + + + +
    +

    첨부파일

    +
      + +
    • + + + + + () + 회 다운로드 | DATE : +
    • + +
    +
    + + + + + + + + + + +
    + + + + + + + +
      +
    • 이전글
    • +
    • 다음글
    • +
    + + +
    + - -
    - -
    -
    @@ -253,6 +256,19 @@ $(function() { // 이미지 리사이즈 $("#bo_v_atc").viewimageresize(); + + //sns공유 + $(".btn_share").click(function(){ + $("#bo_v_sns").fadeIn(); + + }); + + $(document).mouseup(function (e) { + var container = $("#bo_v_sns"); + if (!container.is(e.target) && container.has(e.target).length === 0){ + container.css("display","none"); + } + }); }); function excute_good(href, $el, $tx) diff --git a/theme/basic/skin/board/gallery/view_comment.skin.php b/theme/basic/skin/board/gallery/view_comment.skin.php index 14b0333d2..a372ff01f 100644 --- a/theme/basic/skin/board/gallery/view_comment.skin.php +++ b/theme/basic/skin/board/gallery/view_comment.skin.php @@ -7,7 +7,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 var char_min = parseInt(); // 최소 var char_max = parseInt(); // 최대 - +

    댓글목록

    @@ -15,8 +15,7 @@ var char_max = parseInt(); // 최대 $cmt_amt = count($list); for ($i=0; $i<$cmt_amt; $i++) { $comment_id = $list[$i]['wr_id']; - $cmt_depth = ""; // 댓글단계 - $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 20; + $cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50; $comment = $list[$i]['content']; /* if (strstr($list[$i]['wr_option'], "secret")) { @@ -29,54 +28,52 @@ var char_max = parseInt(); // 최대
    style="margin-left:px;border-top-color:#e0e0e0">
    -

    님의 댓글

    +

    님의 댓글의 댓글

    - 댓글의 댓글 - 아이피 - + 아이피 + () - 작성일 - + 작성일 +
    -

    - 비밀글 - -

    +
    +

    + 비밀글 + +

    + "> - + if($w == 'cu') { + $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' "; + $cmt = sql_fetch($sql); + if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) + $cmt['wr_content'] = ''; + $c_wr_content = $cmt['wr_content']; + } + + $c_reply_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=c#bo_vc_w'; + $c_edit_href = './board.php?'.$query_string.'&c_id='.$comment_id.'&w=cu#bo_vc_w'; + ?> + + +
    + + " id="secret_comment_"> - - -

    등록된 댓글이 없습니다.

    @@ -89,9 +86,9 @@ var char_max = parseInt(); // 최대 $w = 'c'; ?> -
    '; + echo ''; ?> @@ -120,6 +125,7 @@ function faq_open(el) if($con.is(":visible")) { $con.slideUp(); + } else { $("#faq_con .con_inner:visible").css("display", "none"); diff --git a/theme/basic/skin/faq/basic/style.css b/theme/basic/skin/faq/basic/style.css index 35168de92..3c3ce0bbb 100644 --- a/theme/basic/skin/faq/basic/style.css +++ b/theme/basic/skin/faq/basic/style.css @@ -1,23 +1,27 @@ @charset "utf-8"; - +#bo_cate {margin:15px 0 10px} #bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#bo_cate ul {margin-bottom:10px;padding-left:1px;zoom:1} +#bo_cate ul {;zoom:1} #bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""} -#bo_cate li {float:left;margin-bottom:-1px} -#bo_cate a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:90px;border:1px solid #ddd;background:#f7f7f7;color:#888;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer} -#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none} -#bo_cate #bo_cate_on {z-index:2;border:1px solid #565e60;background:#fff;color:#565e60;font-weight:bold} +#bo_cate li {display:inline-block;} +#bo_cate a {display:block;border:1px solid #dadada;background:#fff;margin:0 0 5px 0;line-height:30px;padding:0 10px;border-radius:3px} +#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#f3f3f3} +#bo_cate #bo_cate_on {z-index:2;border:1px solid #253dbe;color:#253dbe;font-weight:bold} #faq_wrap {margin:10px 0 30px} #faq_wrap h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} .faq_admin {text-align:right} #faq_wrap ol {margin:0;padding:0;list-style:none} -#faq_con {border:1px solid #e9e9e9;border-top:0} -#faq_con h3 a {display:block;padding:10px;border-top:1px solid #e9e9e9;background:#f2f5f9;text-decoration:none} -#faq_con .con_inner {display:none;padding:10px;line-height:1.8em} -#faq_con .con_closer {margin:10px 0 0;text-align:right} -#faq_con .closer_btn {margin:0;padding:0;border:0;background:transparent} -.faq_tolist {padding:0 10px;text-align:right} -.faq_img {text-align:center} +#faq_wrap li{border:1px solid #ddd;background:#fff;margin:5px 0;} +#faq_wrap li h3{min-height:50px;line-height:30px;padding:10px;padding-left:50px;position:relative} +#faq_wrap li h3 .tit_bg{display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#333;color:#fff;border-radius:50%;width:30px;height:30px} +#faq_con .con_inner{display:none;border-top:1px solid #ddd;padding:15px;padding-left:50px;position:relative;background: #f7f7f7;} +#faq_con .con_inner .tit_bg{display:inline-block;position:absolute;top:10px;left:10px;text-align:center;background:#777;color:#fff;border-radius:50%;width:30px;line-height:30px;height:30px} +#faq_con .con_inner .closer_btn{height:25px;font-size:0.92em;display:inline-block;padding:0 5px;border-radius:5px;} +#faq_con .con_closer{text-align:right} -#faq_sch {text-align:center} \ No newline at end of file +#faq_sch {text-align:center;border:1px solid #ccc;background:#fff;;padding:30px;margin:10px 0} +#faq_sch form{display:inline-block;position:relative} +#faq_sch .sch_tit{font-size:20px;font-weight:bold;display:inline-block;margin-right:10px;vertical-align:middle} +#faq_sch .frm_input{border-color:#646982;border-radius:0;width:300px} +#faq_sch .btn_submit{padding:0 10px;height:40px;color:#000;font-size:1.083em;font-weight:bold;color:#fff;background:#253dbe;} diff --git a/theme/basic/skin/latest/basic/img/icon_file.gif b/theme/basic/skin/latest/basic/img/icon_file.gif index cca47f566ac0db655fb2ab0f56628b64958e48b2..244af004d50b31239c1f480bb0fc3df177333285 100644 GIT binary patch literal 197 zcmZ?wbhEHbC>k_efsqC=g;fbt^4xj%d%z5mM&eoe*OCY|Nk=(0Th3-FfuR*Gw6WSg6w2qb$X!U z$Hc&q>@{nJ*0kkTEC-YHz8FZQ@k?m79C_~0!PRq;F{w*Nt%pfLL5hQAm*)W&QCq3S Ux{8k4(}h`B4?g#9XJD`f08N@mPXGV_ literal 107 zcmZ?wbhEHb-Wqsc#^P~2x#@rVooH@5wHB9i@BozKb;P9uI^*c|UyXO5@>VyLmgEat< Cr6(f* diff --git a/theme/basic/skin/latest/basic/img/icon_hot.gif b/theme/basic/skin/latest/basic/img/icon_hot.gif index c95b839aeef0c1e26a4bab4ea50cd6d3f1969d7f..2936de662a6035fe711e2ca72f8d35c35fcdd832 100644 GIT binary patch literal 319 zcmZ?wbhEHbEtQ*YwDiOn)&_i-FLfo-m9wo z`|J0u%&d1icYVEm_r>BxZ?|rFGGXHDwQFCm-*CUS=J$v9pH827v1swLIkVqv-S&FT znm60GKA$`H`~63^^YZTG=H0KWebV3eV)0@i<6e3B&6LzPTeklF^XuipMep|=`2YVu z17$$*CkrD3gBF7h$QY2H7}#PQLY*8Z>1a(npuSj&!C+2M$D^Au49rIzmu_NUkbT$K z@N|_DYcbb>j2Wy<#m#{VN6yADE^Oe)_z)w+$e|_7pjN@jAe_d}prOvK#K7Mmz^JUi QD9{kY$HvB2;mBYO0LU4C3IG5A literal 97 zcmZ?wbhEHbe)HzdzkmOpK7G1o&6@rD_kZ~C z0Z6`l`EvdG^($7a`10k;@87>SZ{B?6%9V{9H=a0gV&A@fKwYO#pT2+p{)-ncfKov2 zr%#`N;f!KYsiGiW~)lhIr>|74(23<(<=9yw$9#m#@ra2-+bRv!3%fd0dBQ?f)ODm;T_l^Ed4xq>LVCj3 U#2LJNXZi*?xy@tnaAdFs0Qg;*ivR!s literal 145 zcmZ?wbhEHbzHen|7VvwFnzUPlarEA ZqW~YXyUO~T+#YkUoJ%KCQw{PFXi4*tl-~Zypi#>bx zoH=vm#*G`BH*daj<;uHv@4kQkzG~H~FJHdAeEIUtn>R;~9_{Mtx_0f_nl)?Ity_2O z*s&i!ek@+Rc+|z@W*X12PHZCkD2d15*k#mgtxrdBSj@My2(%!y%Ri725^|MOH?MNed6V zWH4B?bq0De3MeqNK4dLOaQFC-7{bsIBBkKW&mha9!6PH#$(QSt&+Vx$CMmB}=`ZBN Q!0YeKBE>UT(~-d%0A})n?*IS* literal 104 zcmZ?wbhEHbV_>ib05Q5F AasU7T diff --git a/theme/basic/skin/latest/basic/img/icon_lock.png b/theme/basic/skin/latest/basic/img/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..2a083a51d9aa7f27a9a379bee2c49d2ca9cc96c6 GIT binary patch literal 1225 zcmbVMOKjU@9CwqjReiHb2qr;4xm2{$;%Dr{rs(5WiB{UD9aj5$M`YxQgL!;>dU#a?KyY4qt7h+l6u0fDD)j3## zs=j>g3pjyc(YjHo`qjcIQL{}#4P}VHbPyWDCXNM;sx3et)Zm<9rSUr--N1pNr}0^? zKouMb&KuJ!E-bIiRJ4@^P0;aUlVBnc5rGMP6$EC(^28vGw|GUg4v$G3v_$-cG`?$8 zwNM0-?Lxp2Y+R#g8t^zO4bM?AdlBe3b&@PS7 z`@SQRWV6{Mnk-?vb0jSYLdd}|aU>Dw@VN3VXzs*A5g485yV!NfQ)lnxS7UY0odgf6dre+N&%(kSsyZUUW5-kNQXljAD0p zMWGn6gWv%C^kp)3@s-+ z9Q$EYaze^72|-a(3{5M1O5t-7olWxW6eA0CqJzy_p08RO?C3R+-ZnOMSF9+xQ1xxM zV%v>Q1r+CP-}dHh2S{ZejLjOBZa2O0Fg?58%Fs2Ipg!f=CTPW1H1^TYGLpieLFE*w z<+qfjWQOAs$?TNGq*8brtN)*vk;oV_ERO#aOXmnxV7S~XeYDwY9%!MCaZzh@eLb$B zw)#CUXDh*XwX-*4eCFEl`uXS%34ZL|`lT~wV9|lXA+TnNa zo$a~x<>${SoA*8Q&{Fl#htaJ_=33vl@pEK@y0BK~4)lWS$8+y=y?q7irm&Y^kj{@; R(%cf16Zrr$W z{rdHjCr{3vJ$vQKmCv3%n>1@!i5WK)~q>x{P^O< zi?3e2x^LgUUAuPu`Sa)6wQGO>{=Iqg=C5DBwt~R}F!=xfKLeG3;!hSv1_pHo9guk- zKQXWs9GJXe!Gr(?hAx*t0V{byl?6c)-Q>=>GF;f9(9+?}ED$k=Bf9zd1Wy$s_Wnkn z84PU88y&a=9iSXMhSSOWmH3xI$C literal 62 zcmZ?wbhEHbC++&YW4WV8MX{2Y_l09y~a2-n^qnkN*GvpMgq1@h1x-1A{t)4#+%^ zpBUJp4@};0iP6RF&=XgqlMO2KpR9E8oa7XAR_$b`iXzA51f4?;er$&r12dHQSe%^| zeYK<-8VnLWIhYwLop{)I>Km)nnc11!o1El48(8?6rcGz!XW`>+oY%&!1E4^4&ClEzh)PmWxV3{9A~!gB2-%RL5bHcgg3Zp^!+W)H2^A_AxQuL diff --git a/theme/basic/skin/latest/basic/img/icon_view.png b/theme/basic/skin/latest/basic/img/icon_view.png new file mode 100644 index 0000000000000000000000000000000000000000..ea76f54424bc4ccedf3334a5c9912725be81c441 GIT binary patch literal 3130 zcmV-A48`+_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004HNklHi{DTb1*jcrauriJho4x(d+gyTuHYJ;;z=4FOos|4v4T1pxR1-Y zjl1ZZxN)4{^3rViZPPR-@vbR&Psj#ZZEyztR zNmQuF&B-gas<2f`Ovz75wF0t1!um=IU?nBlwn~m52?day&iO^D3Z{C-y2%EHh6-k8 zdWI&ZW@d&u3PuKoM*0RoWTtCqVr6P(Wn``Z1xi5Mic-?7f?V97b^&>|N*N_31y=g{ z<>lpi<;HsXMd|v6mX?+vGmMOMfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD#PU%0_}#d=^5=_Tjq>Q^Kd=o{)8=;!8w`~_BBToROua0XV@#UYgi zsro^w#rdU0$*Dl)$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsd- z8CzI5I$Ky6n;4k7nj0Eg7+G36y1E&ex|mxUI=Yy^%)qYK%-Pw}#MsE#z|7Fl)!fm| z$;8#g!pXwT#m&UU)eNTBGq1QLF)uk4W^X3gUa(#xyn3yii&7Iy@{2<9^K)P+ARr^Z zB)>Q#zd*q`*i1nqJTosPzr0uz6g?2%x}+9mmZhe+73JqDfWy}+6N~-kmd@rTCdMuX zW=6(ff14PaS~!`TIy##>8X7nmD?#<9kP~M5K*#8V5(iRZfe8UqAczT1`aljm^Q7hh zb4(F1YcT%*_xI25Uq63*|MvCE=T9F$ynpxh&Ffb$Up#;I^vUB#4%#K*!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qXu2*iX zmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2NtnTP2`N zAzsKW@b!fooL8&|_K;q3ey)B+Vu8M)o`HUDF34YC)x{-2sR(CaRb3oXS&*t9lvsNTp{2Q{sk4i#fw7aJnUSH3Im`@fdQD7?&792LoZQS^91RU!%`D7aOr6bK zElfac6JrCIUeCPZlEl2^RG7V)KzpHj9r5b5axO|uEXgkl$G8yO;GeeeCv{0lv$RV;#QQOs{jsPt4u8R8yOlIo0__~IvcoJg8c1d zX5{ARWaemM>E`5WVQHiU)tf?2nCSx@qYp|PNQng|1WbV-COqi_Iq=Mrng`4=MZm1V z`2XMEKfizd{PF$U*Ds$xef;qL-P<>>U%h}$>=IY|?mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#)_>%=lGBW5e00F4vVPN9!;T4~7{8w1F_e~}SYXI*Om>d8A literal 0 HcmV?d00001 diff --git a/theme/basic/skin/latest/basic/latest.skin.php b/theme/basic/skin/latest/basic/latest.skin.php index 989a3ee40..cd7d11efd 100644 --- a/theme/basic/skin/latest/basic/latest.skin.php +++ b/theme/basic/skin/latest/basic/latest.skin.php @@ -5,40 +5,48 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_stylesheet('', 0); ?> - -
    - +
    +

    • "; + if ($list[$i]['icon_secret']) echo "비밀글 "; + + if ($list[$i]['icon_new']) echo "N새글"; + + if ($list[$i]['icon_hot']) echo "H인기글"; + + + echo " "; if ($list[$i]['is_notice']) echo "".$list[$i]['subject'].""; else echo $list[$i]['subject']; - if ($list[$i]['comment_cnt']) - echo $list[$i]['comment_cnt']; + echo ""; // if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; } // if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; } - if (isset($list[$i]['icon_new'])) echo " " . $list[$i]['icon_new']; - if (isset($list[$i]['icon_hot'])) echo " " . $list[$i]['icon_hot']; - if (isset($list[$i]['icon_file'])) echo " " . $list[$i]['icon_file']; - if (isset($list[$i]['icon_link'])) echo " " . $list[$i]['icon_link']; - if (isset($list[$i]['icon_secret'])) echo " " . $list[$i]['icon_secret']; - ?> + //echo $list[$i]['icon_reply']." "; + // if ($list[$i]['icon_file']) echo " " ; + //if ($list[$i]['icon_link']) echo " " ; + + if ($list[$i]['comment_cnt']) echo " + + ".$list[$i]['comment_cnt'].""; + + ?> + +
    • -
    • 게시물이 없습니다.
    • +
    • 게시물이 없습니다.
    - + 더보기 +
    - \ No newline at end of file diff --git a/theme/basic/skin/latest/basic/style.css b/theme/basic/skin/latest/basic/style.css index ab55517b1..8fb71ebde 100644 --- a/theme/basic/skin/latest/basic/style.css +++ b/theme/basic/skin/latest/basic/style.css @@ -1,11 +1,26 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 새글 스킨 (latest) */ -.lt_pc {float:left;margin-left:20px} -.lt {position:relative;float:left;margin-bottom:20px;padding-bottom:10px;width:354px;height:150px;border-bottom:1px solid #e9e9e9} -.lt ul {margin:0 0 10px;padding:0;list-style:none} -.lt li {padding:3px 0} -.lt .lt_title {display:block;padding:10px 0 8px} -.lt .lt_more {position:absolute;top:10px;right:0} -.lt .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold} \ No newline at end of file + +.lat {position:relative;margin-bottom:20px;overflow:hidden;border: 1px solid #c6cacc;background:#fff} +.lat .lat_title {display:block;padding:0 20px;line-height:45px;font-size:1.083em;border-bottom:1px solid #e2e2e2;color:#253dbe;background:#fcfcfc} +.lat .lat_title a{color:#253dbe;display:inline-block;position:relative} +.lat .lat_title a:after{position:absolute;bottom:-1px;left:0;width:100%;height:2px;background:#253dbe;content:''} +.lat ul{padding:15px 20px} +.lat li {position:relative;line-height:18px;padding:3px 0;padding-right:50px;padding-left:10px;position:relative} +.lat li:before{position: absolute;top: 12px;left: 0px;width: 4px;height: 4px;background: #aaa;content: '';border-radius: 50%;} +.lat li a:hover{color:#a22121} +.lat li .fa-heart{color:#ff0000;} +.lat li .fa-lock{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce} +.lat li .new_icon{display:inline-block;width: 16px;line-height:16px;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;border-radius: 2px;} +.lat li .hot_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius: 2px;} +.lat li .fa-caret-right{color:#bbb} +.lat .lt_date{position:absolute;top:3px;right:0;color:#888} +.lat .empty_li{line-height:145px ;color:#666;text-align:center;padding:0;} +.lat .empty_li:before{background:none;padding:0} + +.lat .lt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4);} +.lat .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center;} +.lat .lt_more:hover{color:#777} \ No newline at end of file diff --git a/theme/basic/skin/latest/notice/latest.skin.php b/theme/basic/skin/latest/notice/latest.skin.php new file mode 100644 index 000000000..5091d3178 --- /dev/null +++ b/theme/basic/skin/latest/notice/latest.skin.php @@ -0,0 +1,53 @@ +', 0); +add_javascript('', 10); +?> + +
    +

    + + +
    + + + \ No newline at end of file diff --git a/theme/basic/skin/latest/notice/style.css b/theme/basic/skin/latest/notice/style.css new file mode 100644 index 000000000..3867cde8e --- /dev/null +++ b/theme/basic/skin/latest/notice/style.css @@ -0,0 +1,16 @@ +@charset "utf-8"; +/* 새글 스킨 (latest) */ +.notice {position:relative;padding:15px 50px;border-bottom:1px solid #d0d6e4} +.notice li{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;} +.notice li a:hover{color:#a22121} +.notice li .lock_icon{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce;vertical-align:top} +.notice li .new_icon{display:inline-block;line-height:16px;width:16px;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;margin-right:3px;border-radius:2px;vertical-align:top} +.notice .cnt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;white-space: nowrap;margin-left:5px; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4)} + +.notice h2{position:absolute;top:50%;left:10px;margin-top:-15px;left:5;line-height:30px} +.notice h2 a{display:inline-block;width:30px;line-height:30px;border-radius:25px;background:#4158d1;color:#fff;text-align:center;color:#fff} +.notice .bx-next{position:absolute;top:50%;right:10px;;width:26px;height:26px;line-height:24px;text-align:center;background:#fff;border:1px solid #d1d1d1;margin-top:-12px} +.notice .bx-prev{position:absolute;top:50%;right:35px;width:26px;height:26px;line-height:24px;text-align:center;background:#fff;border:1px solid #d1d1d1;margin-top:-12px} diff --git a/theme/basic/skin/latest/pic_basic/latest.skin.php b/theme/basic/skin/latest/pic_basic/latest.skin.php new file mode 100644 index 000000000..3e826bd9c --- /dev/null +++ b/theme/basic/skin/latest/pic_basic/latest.skin.php @@ -0,0 +1,67 @@ +', 0); +$thumb_width = 210; +$thumb_height = 150; +?> + +
    +

    +
      + '; + ?> +
    • + + 비밀글 "; + + if ($list[$i]['icon_new']) echo "N새글"; + + if ($list[$i]['icon_hot']) echo "H인기글"; + + + echo " "; + if ($list[$i]['is_notice']) + echo "".$list[$i]['subject'].""; + else + echo $list[$i]['subject']; + + + + echo ""; + + // if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; } + // if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; } + + //echo $list[$i]['icon_reply']." "; + // if ($list[$i]['icon_file']) echo " " ; + //if ($list[$i]['icon_link']) echo " " ; + + if ($list[$i]['comment_cnt']) echo " + + ".$list[$i]['wr_comment'].""; + + ?> + + +
    • + + +
    • 게시물이 없습니다.
    • + +
    + 더보기 + +
    diff --git a/theme/basic/skin/latest/pic_basic/style.css b/theme/basic/skin/latest/pic_basic/style.css new file mode 100644 index 000000000..9945e8d26 --- /dev/null +++ b/theme/basic/skin/latest/pic_basic/style.css @@ -0,0 +1,24 @@ +@charset "utf-8"; +/* 새글 스킨 (latest) */ +.pic_lt{position:relative;margin-bottom:20px;overflow:hidden;border: 1px solid #c6cacc;background:#fff} +.pic_lt .lat_title {display:block;background:#fcfcfc;padding:0 20px;line-height:45px;font-size:1.083em;border-bottom:1px solid #e2e2e2;color:#253dbe;} +.pic_lt .lat_title a{color:#253dbe;display:inline-block;position:relative} +.pic_lt .lat_title a:after{position:absolute;bottom:-1px;left:0;width:100%;height:2px;background:#253dbe;content:''} +.pic_lt .lt_more {position:absolute;top:11px;right:10px;display:block;width:25px;line-height:25px;color:#aaa;border-radius:3px;text-align:center;} +.pic_lt .lt_more:hover{color:#777} +.pic_lt ul:after {display:block;visibility:hidden;clear:both;content:""} +.pic_lt ul{padding:20px 15px } +.pic_lt li{float:left;width:20%;padding:0 10px} +.pic_lt li .lt_img{margin:5px 0;display:block} +.pic_lt li .lt_img img{width:100%;height:auto} +.pic_lt li a:hover{color:#a22121} +.pic_lt li .fa-heart{color:#ff0000;} +.pic_lt li .fa-lock{display: inline-block;line-height: 14px;width: 16px;font-size: 0.833em;color: #4f818c;background: #cbe3e8;text-align: center;border-radius: 2px;font-size: 12px;border:1px solid #a2c6ce} +.pic_lt li .new_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#ffff00;background:#6db142;text-align:center;border-radius: 2px;} +.pic_lt li .hot_icon{display:inline-block;width: 16px;line-height:16px ;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius: 2px;} +.pic_lt li .fa-caret-right{color:#bbb} +.pic_lt .lt_cmt{background:#5c85c1;color:#fff; font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;white-space: nowrap; +-webkit-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +-moz-box-shadow: inset 0 2px 5px rgba(255,255,255,0.4); +box-shadow: inset 0 2px 5px rgba(255,255,255,0.4);} +.pic_lt .lt_date{display:block;margin-top:5px;color: #888;} diff --git a/theme/basic/skin/member/basic/formmail.skin.php b/theme/basic/skin/member/basic/formmail.skin.php index 274bbc96e..42b5520de 100644 --- a/theme/basic/skin/member/basic/formmail.skin.php +++ b/theme/basic/skin/member/basic/formmail.skin.php @@ -6,7 +6,7 @@ add_stylesheet('', ?> -
    +

    님께 메일보내기

    @@ -17,59 +17,58 @@ add_stylesheet('', -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    메일쓰기
    형식 +
    +

    메일쓰기

    +
      + +
    • + + +
    • +
    • + + +
    • + +
    • + + +
    • +
    • + 형식 -
    - - 첨부 파일은 누락될 수 있으므로 메일을 보낸 후 파일이 첨부 되었는지 반드시 확인해 주시기 바랍니다. -
    자동등록방지
    + +
  • + + +
  • +
  • +
    + + +
    +
    첨부 파일은 누락될 수 있으므로 메일을 보낸 후 파일이 첨부 되었는지 반드시 확인해 주시기 바랍니다.
    + +
  • +
  • +
    + + +
    +
  • +
  • + 자동등록방지 + +
  • + +
    + + +
    -
    - - -
    diff --git a/theme/basic/skin/member/basic/login.skin.php b/theme/basic/skin/member/basic/login.skin.php index 86772c70d..6bd3c820d 100644 --- a/theme/basic/skin/member/basic/login.skin.php +++ b/theme/basic/skin/member/basic/login.skin.php @@ -14,33 +14,30 @@ add_stylesheet('',
    회원로그인 - - - - + + + +
    + + - - +
    - \ No newline at end of file + diff --git a/theme/basic/skin/member/basic/member_confirm.skin.php b/theme/basic/skin/member/basic/member_confirm.skin.php index 3ea749ba7..457a318b4 100644 --- a/theme/basic/skin/member/basic/member_confirm.skin.php +++ b/theme/basic/skin/member/basic/member_confirm.skin.php @@ -23,20 +23,15 @@ add_stylesheet('',
    - 회원아이디 + 회원아이디 - - - + +
    - -
    - \ No newline at end of file + diff --git a/theme/basic/skin/member/basic/register_form.skin.php b/theme/basic/skin/member/basic/register_form.skin.php index 436bee0e9..c69447e72 100644 --- a/theme/basic/skin/member/basic/register_form.skin.php +++ b/theme/basic/skin/member/basic/register_form.skin.php @@ -6,61 +6,51 @@ add_stylesheet('', ?> -
    - - - - + + + + -
    - - - - - - - - date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400))) { // 닉네임수정일이 지나지 않았다면 ?> - - - - -
    - - - - - - - - - - - - - - - - -
    사이트 이용정보 입력
    - 영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요. - class="frm_input " minlength="3" maxlength="20"> + + + + + + + + + date("Y-m-d", G5_SERVER_TIME - ($config['cf_nick_modify'] * 86400))) { // 닉네임수정일이 지나지 않았다면 ?> + + + +
    +
    +

    사이트 이용정보 입력

    +
      +
    • + + class="frm_input half_input " minlength="3" maxlength="20" placeholder="아이디"> -
    class="frm_input " minlength="3" maxlength="20">
    class="frm_input " minlength="3" maxlength="20">
    + 영문자, 숫자, _ 만 입력 가능. 최소 3자이상 입력하세요. + +
  • + + class="frm_input half_input " minlength="3" maxlength="20" placeholder="비밀번호"> + + + class="frm_input half_input right_input " minlength="3" maxlength="20" placeholder="비밀번호 확인"> +
  • +
    - - - - - - - - - - - - - + + 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. + - - - - + + + - - - - - - + +
  • + + class="frm_input full_input " size="70" maxlength="255" placeholder="홈페이지"> +
  • + - - - - - - +
  • + + + + class="frm_input half_input " maxlength="20" placeholder="전화번호"> + - -
  • - - - - + + - - - - - - - -
    개인정보 입력
    - - 아이핀 본인확인 후에는 이름이 자동 입력되고 휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되어 수동으로 입력할수 없게 됩니다. - - class="frm_input " size="10"> +

    개인정보 입력

    + +
      +
    • + + class="frm_input half_input " size="10" placeholder="이름"> ', else $mb_cert = '휴대폰'; ?> +
      본인확인성인인증 완료
      -
    - - 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    - 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. -
    - - - -
    + + + +
  • + + + + + + + 공백없이 한글,영문,숫자만 입력 가능 (한글2자, 영문4자 이상)
    + 닉네임을 바꾸시면 앞으로 일 이내에는 변경 할 수 없습니다. +
    + +
  • + + +
  • + + @@ -109,160 +104,176 @@ add_stylesheet('', - -
  • class="frm_input " size="70" maxlength="255">
    class="frm_input " maxlength="20">
    - class="frm_input " maxlength="20"> + + + + class="frm_input right_input half_input " maxlength="20" placeholder="휴대폰번호"> -
    - 주소 + + +
  • 필수 -
  • - class="frm_input " size="5" maxlength="6"> + class="frm_input " size="5" maxlength="6" placeholder="우편번호">
    - class="frm_input frm_address " size="50"> -
    - - + class="frm_input frm_address full_input " size="50" placeholder="기본주소"> +
    + +
    - - + + -
    + + + +
    - - - - - - - - - +

    기타 개인설정

    +
      + +
    • + + +
    • + - -
    - - - - + +
  • + + +
  • + - = $config['cf_icon_level']) { ?> - - - - - + + + - - - - + + - - - - - - + +
  • + + + > + 휴대폰 문자메세지를 받겠습니다. + +
  • + - - - - - - - - - - - + + + - - - - - - + - - - - - -
    기타 개인설정
    + = $config['cf_icon_level']) { ?> +
  • + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    - gif만 가능하며 용량 바이트 이하만 등록됩니다. + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다.
    - + 회원아이콘 -
  • + = $config['cf_icon_level'] && $config['cf_member_img_size'] && $config['cf_member_img_width'] && $config['cf_member_img_height']) { ?> +
  • + + + + + 이미지 크기는 가로 픽셀, 세로 픽셀 이하로 해주세요.
    + gif, jpg, png파일만 가능하며 용량 바이트 이하만 등록됩니다. +
    + + + 회원아이콘 + + + + +
  • + + +
  • + > 정보 메일을 받겠습니다. -
  • - > - 휴대폰 문자메세지를 받겠습니다. -
    - - 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. - + +
  • + id="reg_mb_open"> 다른분들이 나의 정보를 볼 수 있도록 합니다. -
  • 정보공개 + + 정보공개를 바꾸시면 앞으로 일 이내에는 변경이 안됩니다. + + + +
  • + 정보공개 + 정보공개는 수정후 일 이내, 까지는 변경이 안됩니다.
    이렇게 하는 이유는 잦은 정보공개 수정으로 인하여 쪽지를 보낸 후 받지 않는 경우를 막기 위해서 입니다.
    - -
  • 자동등록방지
    + +
  • + + +
  • + + +
  • + 자동등록방지 + +
  • +
    - -
    - - 취소 -
    -
    + +
    +
    + 취소 + +
    + -
    \ No newline at end of file diff --git a/theme/basic/skin/member/basic/register_result.skin.php b/theme/basic/skin/member/basic/register_result.skin.php index 1267d20ee..2072485a3 100644 --- a/theme/basic/skin/member/basic/register_result.skin.php +++ b/theme/basic/skin/member/basic/register_result.skin.php @@ -6,13 +6,13 @@ add_stylesheet('', ?> -
    - -

    +

    +

    회원가입이 완료되었습니다.

    +

    님의 회원가입을 진심으로 축하합니다.

    - +

    회원 가입 시 입력하신 이메일 주소로 인증메일이 발송되었습니다.
    발송된 인증메일을 확인하신 후 인증처리를 하시면 사이트를 원활하게 이용하실 수 있습니다. @@ -38,9 +38,7 @@ add_stylesheet('', 감사합니다.

    - + 메인으로
    \ No newline at end of file diff --git a/theme/basic/skin/member/basic/scrap.skin.php b/theme/basic/skin/member/basic/scrap.skin.php index e89053522..c2a7c52ce 100644 --- a/theme/basic/skin/member/basic/scrap.skin.php +++ b/theme/basic/skin/member/basic/scrap.skin.php @@ -6,41 +6,28 @@ add_stylesheet('', ?> -
    -

    +
    +

    -
    - - - - - - - - - - - - - - - - - - - - - +
    +
    "; ?> - -
    스크랩 목록
    번호게시판제목보관일시삭제
    삭제
    자료가 없습니다.
    + 자료가 없습니다."; ?> +
    - +
    \ No newline at end of file diff --git a/theme/basic/skin/member/basic/scrap_popin.skin.php b/theme/basic/skin/member/basic/scrap_popin.skin.php index 81f82a5a9..ad3ed8b28 100644 --- a/theme/basic/skin/member/basic/scrap_popin.skin.php +++ b/theme/basic/skin/member/basic/scrap_popin.skin.php @@ -6,35 +6,34 @@ add_stylesheet('', ?> -
    +

    스크랩하기

    -
    +
    -
    - - - - - - - - - - - - -
    제목 확인 및 댓글 쓰기
    제목
    -
    +
    +

    제목 확인 및 댓글 쓰기

    +
      +
    • + 제목 + +
    • +
    • + + +
    • +
    +
    -

    - 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. -

    +

    + 스크랩을 하시면서 감사 혹은 격려의 댓글을 남기실 수 있습니다. +

    -
    - +
    + +
    diff --git a/theme/basic/skin/member/basic/style.css b/theme/basic/skin/member/basic/style.css index b86359a68..b3a308714 100644 --- a/theme/basic/skin/member/basic/style.css +++ b/theme/basic/skin/member/basic/style.css @@ -1,5 +1,4 @@ @charset "utf-8"; -/* SIR 지운아빠 */ /* ### 기본 스타일 커스터마이징 시작 ### */ @@ -22,6 +21,7 @@ .mbskin .win_btn input {} .mbskin .win_btn a {} .mbskin .win_btn a:focus, .mbskin .win_btn a:hover {} + /* 게시판용 버튼 */ .mbskin a.btn_b01 {} .mbskin a.btn_b01:focus, .mbskin .btn_b01:hover {} @@ -30,7 +30,30 @@ .mbskin a.btn_admin {} /* 관리자 전용 버튼 */ .mbskin a.btn_admin:focus, .mbskin a.btn_admin:hover {} +/* 기본박스 */ +.mbskin{position: relative;margin:100px auto 0;border:1px solid #ddd;width:400px;background:#fff;text-align:center; +} +.mbskin:before,.mbskin:after{ +content:""; +position:absolute;z-index:-1;top:2%;bottom:0;left:10px;right:10px; +-webkit-box-shadow:0 0 20px rgba(0,0,0,0.8); + -moz-box-shadow:0 0 20px rgba(0,0,0,0.8); + box-shadow:0 0 20px rgba(0,0,0,0.8); +-moz-border-radius:100px / 10px; + border-radius:100px / 10px;} +.mbskin:after{right:10px;left:auto; + -webkit-transform:skew(8deg) rotate(3deg); + -moz-transform:skew(8deg) rotate(3deg); + -ms-transform:skew(8deg) rotate(3deg); + -o-transform:skew(8deg) rotate(3deg); + transform:skew(8deg) rotate(3deg);} +.mbskin .frm_input{width:100%} +.mbskin .btn_submit{width:100%;margin:10px 0 0;height:45px;font-weight:bold;font-size:1.25em} +.mbskin h1{margin: 60px 0 30px;font-size: 2em;} + + /* 기본테이블 */ + .mbskin .tbl_head01 {} .mbskin .tbl_head01 caption {} .mbskin .tbl_head01 thead th {} @@ -82,95 +105,158 @@ /* ### 기본 스타일 커스터마이징 끝 ### */ /* 회원가입 약관 */ -#fregister section {margin:0 0 20px;padding:20px 0} -#fregister h2 {margin:0 0 20px;text-align:center} -#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:98%;height:150px;border:1px solid #e9e9e9;background:#f7f7f7} -#fregister .fregister_agree {padding:10px 0 0;text-align:right} -#fregister .fregister_agree label {display:inline-block;margin-right:5px} -#fregister p {color:#e8180c;text-align:center} -#fregister .btn_confirm {margin-bottom:20px} -#fregister_private .tbl_head01 th{;text-align:center;border:1px solid #d1dee2;width:33%} -#fregister_private .tbl_head01 td {border:1px solid #e9e9e9} -#fregister_private .tbl_head01 caption{position:absolute;font-size:0;line-height:0;overflow:hidden} +#fregister p{text-align:center;color: #c7254e;background: #f9f2f4;padding:10px;border:1px solid #ecc7d2;margin:0 0 5px} +#fregister section {;margin:10px auto 30px;border:1px solid #dbdbdb;position:relative;border-radius:3px 3px 0 0 ; +-webkit-box-shadow: 0 1px 3px #eee; +-moz-box-shadow: 0 1px 3px #eee; +box-shadow: 0 1px 3px #eee; +} +#fregister_chkall{text-align:right} +#fregister h2 {text-align:left;padding:15px 20px;border-bottom:1px solid #dbdbdb;background:#f8f8f8} +#fregister textarea {display:block;padding:20px;width:100%;height:150px;background:#fff;border:0;line-height:1.6em} +#fregister .fregister_agree {position:absolute;top:0;right:0;;padding:15px} +#fregister_private div{padding:20px;background:#fff} +#fregister_private table{width:100%;border-collapse:collapse} +#fregister_private table caption {position:absolute;font-size:0;line-height:0;overflow:hidden} +#fregister_private table th{background:#646982;width:33.33%;color:#fff;padding:10px;border:1px solid #555971} +#fregister_private table td{border:1px solid #ddd;padding:10px;} +#fregister .btn_confirm{text-align:center;} +#fregister .btn_confirm .btn_submit{height:50px;padding:0 40px;font-weight:bold;font-size:1.083em} /* 회원가입 입력 */ -#fregisterform textarea {height:50px} - +#register_form{background:#fff;padding:20px;margin-bottom:20px} #fregisterform #msg_certify {margin:5px 0 0;padding:5px;border:1px solid #dbecff;background:#eaf4ff;text-align:center} - #fregisterform .frm_address {margin:5px 0 0} #fregisterform #mb_addr3 {display:inline-block;margin:5px 0 0;vertical-align:middle} #fregisterform #mb_addr_jibeon {display:block;margin:5px 0 0} +#fregisterform .btn_confirm{text-align:center} +#fregisterform .btn_confirm .btn_submit{height:45px;;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .btn_confirm .btn_cancel{line-height:45px;height:45px;padding:0 30px;font-weight:bold;font-size:1.083em} +#fregisterform .frm_info{display:block;color:#3497d9;font-size:0.92em} +#fregisterform .form_01 div{margin: 0 0 50px} +#fregisterform .captcha{display:block;margin:5px 0 0} +#fregisterform .reg_mb_img_file img{max-width:100%;height:auto} + /* 회원가입 완료 */ -#reg_result {padding:50px 0 0} +#reg_result {padding:100px 0 40px;text-align:center;background:#fff} +#reg_result h2{font-size:2em;margin:0 0 20px} +#reg_result h2 strong{color:#ed6478} #reg_result #result_email {margin:20px 0;padding:10px 50px;border-top:1px solid #e9e9e9;border-bottom:1px solid #dde4e9;background:#fff;line-height:2em} #reg_result #result_email span {display:inline-block;width:150px} #reg_result #result_email strong {color:#e8180c;font-size:1.2em} #reg_result p {line-height:1.8em} #reg_result .btn_confirm {margin:50px 0} +#reg_result .reg_result_p{font-size:1.25em;margin:0 0 10px;} +#reg_result .reg_result_p strong{color:#3497d9} +#reg_result .btn_submit{padding: 0 30px;font-weight:bold;height:40px;line-height:40px;display:inline-block;margin:30px 0 0 ;font-size:1.083em} /* 아이디/비밀번호 찾기 */ #find_info #mb_hp_label {display:inline-block;margin-left:10px} -#find_info #info_fs {margin:0 20px 20px;padding:0;background:#fff} -#find_info #info_fs .frm_input {width:70%} -#find_info p {margin:0 0 10px;line-height:1.8em} -#find_info #captcha {margin:0 20px} +#find_info p {line-height:1.5em} +#find_info #mb_email{margin:10px 0;} /* 로그인 */ -#mb_login {margin:0 auto;padding:100px 0;width:500px} -#mb_login h1 {margin:0 0 20px;font-size:1.3em} -#mb_login h2 {margin:0} -#mb_login p {padding:10px 0;line-height:1.5em} -#mb_login #login_fs {position:relative;margin:0;padding:20px 20px 20px 95px;border:1px solid #cfded8;border-bottom:0;background:#fff} -#mb_login #login_fs legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} -#mb_login #login_fs label {letter-spacing:-0.1em} -#mb_login #login_fs .login_id {position:absolute;top:26px;left:95px} -#mb_login #login_fs .login_pw {position:absolute;top:52px;left:95px} -#mb_login #login_fs .frm_input {display:block;margin:0 0 5px 80px;width:162px} -#mb_login #login_fs .btn_submit {position:absolute;top:20px;right:95px;width:60px;height:53px} -#mb_login #login_info {margin:0 0 30px;padding:20px;border:1px solid #cfded8;background:#f5f6fa} -#mb_login #login_info div {text-align:right} +#mb_login {} +#login_fs{padding:0 50px} +#mb_login #login_fs .frm_input{margin:0 0 10px} +#mb_login #login_fs .btn_submit {margin:0 0 20px} +#mb_login #login_info{background:#f6f6f6;padding:25px 10px;border-top:1px solid #e8e8e8;margin:40px 0 0 } +#mb_login #login_info:after {display:block;visibility:hidden;clear:both;content:""} +#mb_login #login_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#mb_login #login_info a{display:inline-block;width:50%;float:left} +#login_password_lost{border-right:1px solid #ddd} + +#mb_login_notmb{margin:30px auto;padding:20px 30px } +#mb_login_notmb h2{font-size:1.25em;margin:20px 0 10px} +#guest_privacy{border:1px solid #ccc;text-align:left;line-height:1.6em;color:#666;background:#fafafa;padding:10px;height:150px;margin:10px 0;overflow-y:auto} +#mb_login_notmb .btn_submit{display:block;text-align:center;line-height:45px} + +#mb_login_od_wr{margin:30px auto;padding:20px 30px } +#mb_login_od_wr h2{font-size:1.25em;margin:20px 0 10px} +#mb_login_od_wr .frm_input{margin:10px 0 0 } +#mb_login_od_wr p{background:#f3f3f3;margin:20px 0 0 ;padding:15px 20px;line-height:1.5em} /* 쪽지 */ -#memo_view_contents {margin:0 auto 20px;width:90%} -#memo_view_contents h1 {position:absolute;font-size:0;line-height:0;overflow:hidden} -#memo_view_ul {margin:0;padding:0 0 10px;border-bottom:1px solid #eee;list-style:none} -.memo_view_li {position:relative;padding:5px 0} -.memo_view_subj {display:inline-block;width:65px} -#memo_view p {padding:10px 0;min-height:150px;height:auto !important;height:150px;background:#fff;line-height:1.8em} +#memo_list .memo_name,#memo_list .memo_name .sv_wrap{font-weight:bold} +#memo_list .memo_datetime{float:right;font-size:0.92em;color:#777;font-style:italic} +#memo_list .memo_del{margin-left: 5px; color: #49857c;font-size: 15px;} + +#memo_view_contents {margin:10px 0;border:1px solid #ddd;} +#memo_view_contents h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#memo_view_ul {margin:0;border-bottom:1px solid #eee;list-style:none;background:#f3f3f3;} +#memo_view_ul:after {display:block;visibility:hidden;clear:both;content:""} +.memo_view_li {position:relative;padding:10px;float:left;width:50%;} +.memo_view_name strong,.memo_view_name .sv_wrap{font-weight:bold !important} +.memo_view_subj{display: inline-block;height: 20px;line-height: 18px;border: 1px solid #3497d9;color: #3497d9;padding: 0 5px;border-radius: 15px;font-size: 11px;} +.memo_view_li .profile_img img{border-radius:50%} +.memo_view_date{text-align:right;color:#555;font-style:italic} +.memo_view_date strong{font-weight:normal} +#memo_view .btn_b02{float:right} +#memo_view p {padding:10px;border-top:1px solid #ddd;min-height:150px;height:auto !important;height:150px;background:#fff;line-height:1.8em} #memo_write textarea {height:100px} /* 스크랩 */ +#scrap .scrap_tit{font-weight:bold;display:block;font-size:1.083em;margin-bottom:5px;line-height:1.3em} +#scrap .scrap_cate{ display:block;color:#3598db ;font-size:0.92em;float:left} +#scrap .scrap_datetime{;color:#777;font-style:italic;float:right} +#scrap .scrap_del{position:absolute;top:5px;right:10px;font-size:18px;color:#49857c} +#scrap .scrap_del:hover{color:#98ca69} #scrap_do table {margin:0 0 10px;width:100%} #scrap_do textarea {height:100px} +#scrap_do .scrap_tit{background:#f3f3f3;padding:10px 15px;font-size:1.083em;font-weight:bold} +#scrap_do label{display:block;margin:0 0 5px;font-size:0.92em} +/*포인트*/ +#point .point_top{line-height:15px;margin:0 0 5px} +#point .point_top:after {display:block;visibility:hidden;clear:both;content:""} +#point .point_tit{font-weight:bold;float:left;font-size:1.083em;display:block;} +#point .point_num{font-size:1.25em;color:#00c4ac;font-weight:bold;float:right;} +#point .point_date1{float:left;color:#555;font-style:italic} +#point .point_date{float:right;color:#555;font-style:italic} +#point .txt_expired {color:#aaa;} +#point .point_all{background:#ae99da;border:0;border-bottom:2px solid #9781c5;color:#fff;font-weight:bold;font-size:1.083em} +#point .point_all span,#point .point_status span{float:right;} +#point .point_status{background:#737373;border:0;color:#fff;font-weight:bold;font-size:1.083em} +#point .point_status span{margin-left:10px} /* 회원 비밀번호 확인 */ -#mb_confirm {margin:0 auto;padding:100px 0;width:500px} -#mb_confirm h1 {margin:0 0 20px;font-size:1.3em} -#mb_confirm p {padding:20px;border:1px solid #dde4e9;border-bottom:0;background:#fff} -#mb_confirm p strong {display:block} -#mb_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #e9e9e9;background:#f5f6fa;text-align:center} +#mb_confirm {} +#mb_confirm h1 {margin:60px 0 30px;font-size:2em} +#mb_confirm p {padding:0 20px 40px;border-bottom:1px solid #e9e9e9;font-size:1.083em;line-height:1.4em;color:#656565} +#mb_confirm p strong {display:block;color:#3ca1ff;font-size:1.167em;margin:0 0 5px} +#mb_confirm fieldset {;padding:50px;text-align:left} #mb_confirm fieldset .frm_input {background-color:#fff !important} #mb_confirm label {letter-spacing:-0.1em} -#mb_confirm_id {display:inline-block;margin-right:20px;font-weight:bold} +#mb_confirm_id {display:block;margin:5px 0 10px;font-weight:bold} +#mb_confirm .confirm_id{font-size:0.92em;color:#666} /* 비밀글 비밀번호 확인 */ -#pw_confirm {margin:0 auto;padding:100px 0;width:500px} -#pw_confirm h1 {margin:0 0 20px;font-size:1.3em} -#pw_confirm p {padding:20px;border:1px solid #dde4e9;border-bottom:0;background:#fff} -#pw_confirm p strong {display:block} -#pw_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #e9e9e9;background:#f5f6fa;text-align:center} +#pw_confirm h1 {margin:60px 20px 30px;font-size:2em} +#pw_confirm p {padding:0 20px 40px;border-bottom:1px solid #e9e9e9;font-size:1.083em;line-height:1.4em;color:#656565} +#pw_confirm p strong {display:block;color:#3ca1ff;font-size:1.167em;margin:0 0 5px} +#pw_confirm fieldset {;padding:50px;text-align:center} #pw_confirm fieldset .frm_input {background-color:#fff !important} #pw_confirm label {letter-spacing:-0.1em} #pw_confirm_id {display:inline-block;margin-right:20px;font-weight:bold} +#mb_confirm_id{} /* 폼메일 */ -#formmail #subject {width:386px} #formmail textarea {height:100px} +#formmail .formmail_flie{position:relative} +#formmail .formmail_flie .file_wr {border: 1px solid #ccc;background: #fff;color: #000;vertical-align: middle;border-radius: 3px;padding: 5px;height: 40px;margin: 0;} +#formmail .lb_icon {position: absolute;top: 1px;left: 1px;border-radius: 3px 0 0 3px;height: 38px;line-height: 38px;width: 40px;background: #eee;text-align: center;color: #888;} +#formmail .frm_file {padding-left: 50px;} +#formmail .frm_info{color: #3497d9;font-size: 0.92em;} /* 자기소개 */ +#profile h1 a{color:#fff} #profile table {margin-bottom:0} -#profile section {margin:0 auto 20px;padding:20px;width:86%} -#profile h2 {margin:0} \ No newline at end of file +#profile table th{text-align:left;padding:10px;width:100px} +#profile section {color: #2d4c7b;background: #eff9f9;padding: 10px;border: 1px solid #bfd4dc;margin: 10px 0;} +#profile h2 {margin:0 0 5px} +#profile .profile_name{text-align:center;font-weight:bold} +#profile .my_profile_img{display:block;margin:20px 0 5px;} +#profile .my_profile_img img{border-radius:50%;border:1px solid #aaa} +#profile .profile_img img{border-radius:50%} +#profile .profile_name .sv_wrap{font-weight:bold;text-align:left} \ No newline at end of file diff --git a/theme/basic/skin/new/basic/new.skin.php b/theme/basic/skin/new/basic/new.skin.php index 2558d8118..9401f2b50 100644 --- a/theme/basic/skin/new/basic/new.skin.php +++ b/theme/basic/skin/new/basic/new.skin.php @@ -22,8 +22,8 @@ add_stylesheet('', 0);
    - - 목록 + 목록 + +
    diff --git a/theme/basic/skin/search/basic/search.skin.php b/theme/basic/skin/search/basic/search.skin.php index e341efa3f..c6386f500 100644 --- a/theme/basic/skin/search/basic/search.skin.php +++ b/theme/basic/skin/search/basic/search.skin.php @@ -23,8 +23,10 @@ add_stylesheet('', - - + + + + - id="sop_or" name="sop"> - - id="sop_and" name="sop"> - + + id="sop_or" name="sop"> + + id="sop_and" name="sop"> + + @@ -68,7 +72,7 @@ add_stylesheet('', if ($board_count) { ?>
    -

    전체검색 결과

    +

    전체검색 결과

    게시판
    @@ -109,7 +113,7 @@ add_stylesheet('', for ($i=0; $i', ?>
  • - - 새창 +
    + + 새창 +

    - - +
    + + +
  • - +
    diff --git a/theme/basic/skin/search/basic/style.css b/theme/basic/skin/search/basic/style.css index 8adf23a45..94d01dc26 100644 --- a/theme/basic/skin/search/basic/style.css +++ b/theme/basic/skin/search/basic/style.css @@ -1,29 +1,53 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 전체검색결과 스킨 */ -#sch_res_detail {padding:0 0 10px;border-bottom:1px solid #e9e9e9;text-align:center} +#sch_res_detail {background:#fff;padding:30px;border:1px solid #ccc;text-align:center;margin:0 0 10px} #sch_res_detail legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden} -#sch_res_ov {margin:0 0 10px;padding:10px;border-bottom:1px solid #e9e9e9;background:#f5f6fa;zoom:1} +#sch_res_detail select{border:1px solid #646982;height:40px;padding:0 5px} +#sch_res_detail .frm_input{border:1px solid #646982;border-radius:0;} +#sch_res_detail .sch_wr{position:relative;display:inline-block} +#sch_res_detail .btn_submit{padding:0 10px;height:40px;color:#000;font-size:1.083em;font-weight:bold;color:#fff;background:#253dbe} +#sch_res_detail .sch_rd{display:block;margin:5px 0 0;font-size:0.92em;color:#666} + +#sch_res_ov {text-align:center;zoom:1} #sch_res_ov:after {display:block;visibility:hidden;clear:both;content:""} -#sch_res_ov h2 {float:left} -#sch_res_ov dl {float:left;margin:0 0 0 10px} +#sch_res_ov h2 {text-align:center;margin:30px 0 10px;font-size:1.5em;} +#sch_res_ov h2 strong{color:#00c4ac;} +#sch_res_ov dl {display:inline-block;line-height: 30px;font-size: 0.92em;color: #4e546f;background: #d4d4d4;padding: 0 10px;border-radius: 5px;} +#sch_res_ov dl:after {display:block;visibility:hidden;clear:both;content:""} #sch_res_ov dt {float:left} #sch_res_ov dd {float:left;margin:0 10px 0 5px} -#sch_res_ov p {float:right;margin:0;padding:0;line-height:1em} +#sch_res_ov dd .sch_word{color:#000} +#sch_res_ov p {margin:0;padding:0;line-height:1em;color:#777;font-size:0.92em} + + +#sch_res_board {background:#ecf2f3;padding:7px;margin:10px 0;border:1px solid #bed1d4} +#sch_res_board h2 {position:absolute;font-size:0;line-height:0;overflow:hidden} +#sch_res_board ul {zoom:1} +#sch_res_board ul:after {display:block;visibility:hidden;clear:both;content:""} +#sch_res_board li {display:inline-block;padding:2px;} +#sch_res_board a {display:block;line-height:26px;padding:0 10px;border-radius:3px;border:1px solid transparent} +#sch_res_board a:focus, #sch_res_board a:hover {text-decoration:none;background:#d2d6dc;} +#sch_res_board .cnt_cmt {font-weight:normal !important;display:inline-block;background:#c4dce0;margin-left:3px;color:#3497d9;border-radius:15px;height:18px;padding:0 5px;line-height:18px;font-size:0.92em} +#sch_res_board .sch_on {z-index:2;background:#3497d9;color:#fff;font-weight:bold;border-bottom-color:#1977b5; +-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202); +-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202); +box-shadow:inset 0 2px 5px rgb(33, 135, 202);} +#sch_res_board .sch_on:hover{;background:#3497d9;color:#fff;} + + -#sch_res_board {margin:0 0 10px;padding-left:1px;list-style:none;zoom:1} -#sch_res_board:after {display:block;visibility:hidden;clear:both;content:""} -#sch_res_board li {float:left;margin-bottom:-1px} -#sch_res_board a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:180px;border:1px solid #ddd;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer} -#sch_res_board a:focus, #sch_res_board a:hover, #sch_res_board a:active {text-decoration:none} -#sch_res_board .cnt_cmt {font-weight:normal !important} .sch_res_list {margin:0 0 10px;padding:10px 0 15px} -.sch_res_list h2 {margin:0 0 15px;font-size:1.2em} -.sch_res_list ul {margin:0;padding:0;list-style:none} -.sch_res_list li {margin:0 0 10px;padding:0 0 10px;border-bottom:1px solid #e9e9e9} +.sch_res_list h2 {margin:0 0 10px;font-size:1.2em} +.sch_res_list ul {margin:0;padding:0;list-style:none;border-top:1px solid #000} +.sch_res_list li {;border-bottom:1px solid #e0e0e0;background:#fff;position:relative} +.sch_res_list .sch_tit{display:block;background:#f4f4f4;padding:10px 70px 10px 10px} +.sch_res_list .pop_a{position:absolute;top:10px;right:10px;color:#666;} .sch_res_title {display:inline-block;margin:0 0 5px} -.sch_res_list p {margin:0 0 10px;line-height:1.8em} -.sch_more {text-align:right} -.sch_on {color:#ff3061} \ No newline at end of file +.sch_res_list p {padding:10px;color:#666;line-height:1.5em} +.sch_res_list .sch_info{padding:10px;color:#777} +.sch_res_list .sch_info:after {display:block;visibility:hidden;clear:both;content:""} +.sch_res_list .profile_img img{border-radius:50%} +.sch_res_list .sch_datetime{float:right;} +.sch_more {text-align:right;margin:10px 0 30px} +.sch_more a{display:inline-block;color:#f2664f} diff --git a/theme/basic/skin/visit/basic/style.css b/theme/basic/skin/visit/basic/style.css index 6b061cb27..039875a6a 100644 --- a/theme/basic/skin/visit/basic/style.css +++ b/theme/basic/skin/visit/basic/style.css @@ -1,13 +1,15 @@ @charset "utf-8"; -/* SIR 지운아빠 */ - /* 방문자 집계 */ -#visit {border-bottom:1px dotted #dde4e9} -#visit div {margin:0 auto;width:970px;zoom:1} -#visit div:after {display:block;visibility:hidden;clear:both;content:""} -#visit h2 {float:left;padding:10px 45px 10px 0} -#visit dl {float:left;margin:0 0 0 10px;padding:0} -#visit dt {float:left;margin:0;padding:10px 0 10px} -#visit dd {float:left;margin:0 30px 0 0;padding:10px} -#visit a {display:inline-block;padding:10px;text-decoration:none} -#visit a:focus, #visit a:hover {} \ No newline at end of file +#visit {border: 1px solid #d2d9e6; border-bottom: 1px solid #c1ccda;margin:40px 20px 20px;background:#fff;position:relative; +-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); +-moz-box-shadow: 0 1px 2px rgba(0,0,0,0.1); +box-shadow:0 1px 2px rgba(0,0,0,0.1)} +#visit .btn_admin{position:absolute;top:10px;right:10px;height:25px;line-height:25px;padding:0 5px;border-radius:3px} +#visit h2 {font-size:1.167em;text-align:center;padding-bottom:15px;padding-top:25px;color:#16b3d6;position:relative} +#visit h2 i{position:absolute;top:-22px;left:50%;width:44px;line-height:44px;margin-left:-22px;border-radius:25px;background:#16b3d6;color:#fff} +#visit dl {border-top:1px solid #e9e9e9;padding:10px 15px;border-radius:5px} +#visit dl:after {display:block;visibility:hidden;clear:both;content:""} +#visit dt {float:left;width:20%;padding:0 5px;line-height:23px;height:23px;color:#555} +#visit dt span{display:inline-block;width:5px;height:5px;border-radius:50%;vertical-align: middle;} +#visit dd {float:left;;width:30%;padding:0 5px;;text-align:right;text-align:right;font-weight:bold;line-height:23px;height:23px;font-size:0.92em} +#visit dd strong{display:inline-block;padding:0 5px;border-radius:20px;line-height:15px;color:#fff;} diff --git a/theme/basic/skin/visit/basic/visit.skin.php b/theme/basic/skin/visit/basic/visit.skin.php index 87e481d2e..768a58829 100644 --- a/theme/basic/skin/visit/basic/visit.skin.php +++ b/theme/basic/skin/visit/basic/visit.skin.php @@ -9,19 +9,17 @@ add_stylesheet('', 0
    -
    -

    접속자집계

    -
    -
    오늘
    -
    -
    어제
    -
    -
    최대
    -
    -
    전체
    -
    -
    - 상세보기 -
    +

    접속자집계

    +
    +
    오늘
    +
    +
    어제
    +
    +
    최대
    +
    +
    전체
    +
    +
    + 상세보기
    \ No newline at end of file diff --git a/theme/basic/tail.php b/theme/basic/tail.php index c7997cfcd..33d3dcb76 100644 --- a/theme/basic/tail.php +++ b/theme/basic/tail.php @@ -8,33 +8,53 @@ if (G5_IS_MOBILE) { ?>
    +
    + + + + +
    +

    - - -
    <?php echo G5_VERSION ?>
    -
    -
    -
    -
    + +
    + +
    <?php echo G5_VERSION ?>
    +
    Copyright © 소유하신 도메인. All rights reserved.
    + + +
    -모바일 버전으로 보기 'basic', // FAQ 스킨 'cf_mobile_faq_skin' => 'basic', // 모바일 FAQ 스킨 'bo_gallery_cols' => 4, // 갤러리 이미지 수 - 'bo_gallery_width' => 174, // 갤러리 이미지 폭 - 'bo_gallery_height' => 124, // 갤러리 이미지 높이 + 'bo_gallery_width' => 210, // 갤러리 이미지 폭 + 'bo_gallery_height' => 150, // 갤러리 이미지 높이 'bo_mobile_gallery_width' => 125, // 모바일 갤러리 이미지 폭 'bo_mobile_gallery_height' => 100, // 모바일 갤러리 이미지 높이 'bo_image_width' => 600, // 게시판 뷰 이미지 폭

    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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/js/font-awesome/fonts/fontawesome-webfont.woff2 b/js/font-awesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/js/font-awesome/less/animated.less b/js/font-awesome/less/animated.less new file mode 100644 index 000000000..66ad52a5b --- /dev/null +++ b/js/font-awesome/less/animated.less @@ -0,0 +1,34 @@ +// Animated Icons +// -------------------------- + +.@{fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.@{fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/js/font-awesome/less/bordered-pulled.less b/js/font-awesome/less/bordered-pulled.less new file mode 100644 index 000000000..f1c8ad75f --- /dev/null +++ b/js/font-awesome/less/bordered-pulled.less @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.@{fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em @fa-border-color; + border-radius: .1em; +} + +.@{fa-css-prefix}-pull-left { float: left; } +.@{fa-css-prefix}-pull-right { float: right; } + +.@{fa-css-prefix} { + &.@{fa-css-prefix}-pull-left { margin-right: .3em; } + &.@{fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.@{fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/js/font-awesome/less/core.less b/js/font-awesome/less/core.less new file mode 100644 index 000000000..c577ac84a --- /dev/null +++ b/js/font-awesome/less/core.less @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.@{fa-css-prefix} { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/js/font-awesome/less/fixed-width.less b/js/font-awesome/less/fixed-width.less new file mode 100644 index 000000000..110289f2f --- /dev/null +++ b/js/font-awesome/less/fixed-width.less @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.@{fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/js/font-awesome/less/font-awesome.less b/js/font-awesome/less/font-awesome.less new file mode 100644 index 000000000..c3677def3 --- /dev/null +++ b/js/font-awesome/less/font-awesome.less @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables.less"; +@import "mixins.less"; +@import "path.less"; +@import "core.less"; +@import "larger.less"; +@import "fixed-width.less"; +@import "list.less"; +@import "bordered-pulled.less"; +@import "animated.less"; +@import "rotated-flipped.less"; +@import "stacked.less"; +@import "icons.less"; +@import "screen-reader.less"; diff --git a/js/font-awesome/less/icons.less b/js/font-awesome/less/icons.less new file mode 100644 index 000000000..159d60042 --- /dev/null +++ b/js/font-awesome/less/icons.less @@ -0,0 +1,789 @@ +/* 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}-glass:before { content: @fa-var-glass; } +.@{fa-css-prefix}-music:before { content: @fa-var-music; } +.@{fa-css-prefix}-search:before { content: @fa-var-search; } +.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } +.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } +.@{fa-css-prefix}-star:before { content: @fa-var-star; } +.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } +.@{fa-css-prefix}-user:before { content: @fa-var-user; } +.@{fa-css-prefix}-film:before { content: @fa-var-film; } +.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } +.@{fa-css-prefix}-th:before { content: @fa-var-th; } +.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } +.@{fa-css-prefix}-check:before { content: @fa-var-check; } +.@{fa-css-prefix}-remove:before, +.@{fa-css-prefix}-close:before, +.@{fa-css-prefix}-times:before { content: @fa-var-times; } +.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } +.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } +.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } +.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } +.@{fa-css-prefix}-gear:before, +.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } +.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } +.@{fa-css-prefix}-home:before { content: @fa-var-home; } +.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } +.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } +.@{fa-css-prefix}-road:before { content: @fa-var-road; } +.@{fa-css-prefix}-download:before { content: @fa-var-download; } +.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } +.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } +.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } +.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } +.@{fa-css-prefix}-rotate-right:before, +.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } +.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } +.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } +.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } +.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } +.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } +.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } +.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } +.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } +.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } +.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } +.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } +.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } +.@{fa-css-prefix}-book:before { content: @fa-var-book; } +.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } +.@{fa-css-prefix}-print:before { content: @fa-var-print; } +.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } +.@{fa-css-prefix}-font:before { content: @fa-var-font; } +.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } +.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } +.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } +.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } +.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } +.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } +.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } +.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } +.@{fa-css-prefix}-list:before { content: @fa-var-list; } +.@{fa-css-prefix}-dedent:before, +.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } +.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } +.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } +.@{fa-css-prefix}-photo:before, +.@{fa-css-prefix}-image:before, +.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } +.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } +.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } +.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } +.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } +.@{fa-css-prefix}-edit:before, +.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } +.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } +.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } +.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } +.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } +.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } +.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } +.@{fa-css-prefix}-play:before { content: @fa-var-play; } +.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } +.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } +.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } +.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } +.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } +.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } +.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } +.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } +.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } +.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } +.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } +.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } +.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } +.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } +.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } +.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } +.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } +.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } +.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } +.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } +.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } +.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } +.@{fa-css-prefix}-mail-forward:before, +.@{fa-css-prefix}-share:before { content: @fa-var-share; } +.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } +.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } +.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } +.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } +.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } +.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } +.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } +.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } +.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } +.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } +.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } +.@{fa-css-prefix}-warning:before, +.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } +.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } +.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } +.@{fa-css-prefix}-random:before { content: @fa-var-random; } +.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } +.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } +.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } +.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } +.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } +.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } +.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } +.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } +.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } +.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } +.@{fa-css-prefix}-bar-chart-o:before, +.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } +.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } +.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } +.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } +.@{fa-css-prefix}-key:before { content: @fa-var-key; } +.@{fa-css-prefix}-gears:before, +.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } +.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } +.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } +.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } +.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } +.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } +.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } +.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } +.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } +.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } +.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } +.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } +.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } +.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } +.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } +.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } +.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } +.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } +.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } +.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } +.@{fa-css-prefix}-facebook-f:before, +.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } +.@{fa-css-prefix}-github:before { content: @fa-var-github; } +.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } +.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } +.@{fa-css-prefix}-feed:before, +.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } +.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } +.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } +.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } +.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } +.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } +.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } +.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } +.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } +.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } +.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } +.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } +.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } +.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } +.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } +.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } +.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } +.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } +.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } +.@{fa-css-prefix}-group:before, +.@{fa-css-prefix}-users:before { content: @fa-var-users; } +.@{fa-css-prefix}-chain:before, +.@{fa-css-prefix}-link:before { content: @fa-var-link; } +.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } +.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } +.@{fa-css-prefix}-cut:before, +.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } +.@{fa-css-prefix}-copy:before, +.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } +.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } +.@{fa-css-prefix}-save:before, +.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } +.@{fa-css-prefix}-square:before { content: @fa-var-square; } +.@{fa-css-prefix}-navicon:before, +.@{fa-css-prefix}-reorder:before, +.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } +.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } +.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } +.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } +.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } +.@{fa-css-prefix}-table:before { content: @fa-var-table; } +.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } +.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } +.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } +.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } +.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } +.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } +.@{fa-css-prefix}-money:before { content: @fa-var-money; } +.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } +.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } +.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } +.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } +.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } +.@{fa-css-prefix}-unsorted:before, +.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } +.@{fa-css-prefix}-sort-down:before, +.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } +.@{fa-css-prefix}-sort-up:before, +.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } +.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } +.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } +.@{fa-css-prefix}-rotate-left:before, +.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } +.@{fa-css-prefix}-legal:before, +.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } +.@{fa-css-prefix}-dashboard:before, +.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } +.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } +.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } +.@{fa-css-prefix}-flash:before, +.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } +.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } +.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } +.@{fa-css-prefix}-paste:before, +.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } +.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } +.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } +.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } +.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } +.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } +.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } +.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } +.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } +.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } +.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } +.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } +.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } +.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } +.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } +.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } +.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } +.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } +.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } +.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } +.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } +.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } +.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } +.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } +.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } +.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } +.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } +.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } +.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } +.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } +.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } +.@{fa-css-prefix}-mobile-phone:before, +.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } +.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } +.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } +.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } +.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } +.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } +.@{fa-css-prefix}-mail-reply:before, +.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } +.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } +.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } +.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } +.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } +.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } +.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } +.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } +.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } +.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } +.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } +.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } +.@{fa-css-prefix}-code:before { content: @fa-var-code; } +.@{fa-css-prefix}-mail-reply-all:before, +.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } +.@{fa-css-prefix}-star-half-empty:before, +.@{fa-css-prefix}-star-half-full:before, +.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } +.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } +.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } +.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } +.@{fa-css-prefix}-unlink:before, +.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } +.@{fa-css-prefix}-question:before { content: @fa-var-question; } +.@{fa-css-prefix}-info:before { content: @fa-var-info; } +.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } +.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } +.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } +.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } +.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } +.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } +.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } +.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } +.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } +.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } +.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } +.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } +.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } +.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } +.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } +.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } +.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } +.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } +.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } +.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } +.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } +.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } +.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } +.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } +.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } +.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } +.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } +.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } +.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } +.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } +.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } +.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } +.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } +.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } +.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } +.@{fa-css-prefix}-toggle-down:before, +.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } +.@{fa-css-prefix}-toggle-up:before, +.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } +.@{fa-css-prefix}-toggle-right:before, +.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } +.@{fa-css-prefix}-euro:before, +.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } +.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } +.@{fa-css-prefix}-dollar:before, +.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } +.@{fa-css-prefix}-rupee:before, +.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } +.@{fa-css-prefix}-cny:before, +.@{fa-css-prefix}-rmb:before, +.@{fa-css-prefix}-yen:before, +.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } +.@{fa-css-prefix}-ruble:before, +.@{fa-css-prefix}-rouble:before, +.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } +.@{fa-css-prefix}-won:before, +.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } +.@{fa-css-prefix}-bitcoin:before, +.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } +.@{fa-css-prefix}-file:before { content: @fa-var-file; } +.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } +.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } +.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } +.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } +.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } +.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } +.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } +.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } +.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } +.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } +.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } +.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } +.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } +.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } +.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } +.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } +.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } +.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } +.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } +.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } +.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } +.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } +.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } +.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } +.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } +.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } +.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } +.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } +.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } +.@{fa-css-prefix}-android:before { content: @fa-var-android; } +.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } +.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } +.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } +.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } +.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } +.@{fa-css-prefix}-female:before { content: @fa-var-female; } +.@{fa-css-prefix}-male:before { content: @fa-var-male; } +.@{fa-css-prefix}-gittip:before, +.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } +.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } +.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } +.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } +.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } +.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } +.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } +.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } +.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } +.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } +.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } +.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } +.@{fa-css-prefix}-toggle-left:before, +.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } +.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } +.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } +.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } +.@{fa-css-prefix}-turkish-lira:before, +.@{fa-css-prefix}-try:before { content: @fa-var-try; } +.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } +.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } +.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } +.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } +.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } +.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } +.@{fa-css-prefix}-institution:before, +.@{fa-css-prefix}-bank:before, +.@{fa-css-prefix}-university:before { content: @fa-var-university; } +.@{fa-css-prefix}-mortar-board:before, +.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } +.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } +.@{fa-css-prefix}-google:before { content: @fa-var-google; } +.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } +.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } +.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } +.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } +.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } +.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } +.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } +.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } +.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } +.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } +.@{fa-css-prefix}-language:before { content: @fa-var-language; } +.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } +.@{fa-css-prefix}-building:before { content: @fa-var-building; } +.@{fa-css-prefix}-child:before { content: @fa-var-child; } +.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } +.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } +.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } +.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } +.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } +.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } +.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } +.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } +.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } +.@{fa-css-prefix}-automobile:before, +.@{fa-css-prefix}-car:before { content: @fa-var-car; } +.@{fa-css-prefix}-cab:before, +.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } +.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } +.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } +.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } +.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } +.@{fa-css-prefix}-database:before { content: @fa-var-database; } +.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } +.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } +.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } +.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } +.@{fa-css-prefix}-file-photo-o:before, +.@{fa-css-prefix}-file-picture-o:before, +.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } +.@{fa-css-prefix}-file-zip-o:before, +.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } +.@{fa-css-prefix}-file-sound-o:before, +.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } +.@{fa-css-prefix}-file-movie-o:before, +.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } +.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } +.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } +.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } +.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } +.@{fa-css-prefix}-life-bouy:before, +.@{fa-css-prefix}-life-buoy:before, +.@{fa-css-prefix}-life-saver:before, +.@{fa-css-prefix}-support:before, +.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } +.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } +.@{fa-css-prefix}-ra:before, +.@{fa-css-prefix}-resistance:before, +.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } +.@{fa-css-prefix}-ge:before, +.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } +.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } +.@{fa-css-prefix}-git:before { content: @fa-var-git; } +.@{fa-css-prefix}-y-combinator-square:before, +.@{fa-css-prefix}-yc-square:before, +.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } +.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } +.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } +.@{fa-css-prefix}-wechat:before, +.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } +.@{fa-css-prefix}-send:before, +.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } +.@{fa-css-prefix}-send-o:before, +.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } +.@{fa-css-prefix}-history:before { content: @fa-var-history; } +.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } +.@{fa-css-prefix}-header:before { content: @fa-var-header; } +.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } +.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } +.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } +.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } +.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } +.@{fa-css-prefix}-soccer-ball-o:before, +.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } +.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } +.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } +.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } +.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } +.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } +.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } +.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } +.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } +.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } +.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } +.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } +.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } +.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } +.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } +.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } +.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } +.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } +.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } +.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } +.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } +.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } +.@{fa-css-prefix}-at:before { content: @fa-var-at; } +.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } +.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } +.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } +.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } +.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } +.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } +.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } +.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } +.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } +.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } +.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } +.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } +.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } +.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } +.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } +.@{fa-css-prefix}-shekel:before, +.@{fa-css-prefix}-sheqel:before, +.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } +.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } +.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } +.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } +.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } +.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } +.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } +.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } +.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } +.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } +.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } +.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } +.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } +.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } +.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } +.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } +.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } +.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } +.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } +.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } +.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } +.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } +.@{fa-css-prefix}-intersex:before, +.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } +.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } +.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } +.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } +.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } +.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } +.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } +.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } +.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } +.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } +.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } +.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } +.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } +.@{fa-css-prefix}-server:before { content: @fa-var-server; } +.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } +.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } +.@{fa-css-prefix}-hotel:before, +.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } +.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } +.@{fa-css-prefix}-train:before { content: @fa-var-train; } +.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } +.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } +.@{fa-css-prefix}-yc:before, +.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } +.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } +.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } +.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } +.@{fa-css-prefix}-battery-4:before, +.@{fa-css-prefix}-battery:before, +.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } +.@{fa-css-prefix}-battery-3:before, +.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } +.@{fa-css-prefix}-battery-2:before, +.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } +.@{fa-css-prefix}-battery-1:before, +.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } +.@{fa-css-prefix}-battery-0:before, +.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } +.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } +.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } +.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } +.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } +.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } +.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } +.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } +.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } +.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } +.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } +.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } +.@{fa-css-prefix}-hourglass-1:before, +.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } +.@{fa-css-prefix}-hourglass-2:before, +.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } +.@{fa-css-prefix}-hourglass-3:before, +.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } +.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } +.@{fa-css-prefix}-hand-grab-o:before, +.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } +.@{fa-css-prefix}-hand-stop-o:before, +.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } +.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } +.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } +.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } +.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } +.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } +.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } +.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } +.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } +.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } +.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } +.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } +.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } +.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } +.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } +.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } +.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } +.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } +.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } +.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } +.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } +.@{fa-css-prefix}-tv:before, +.@{fa-css-prefix}-television:before { content: @fa-var-television; } +.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } +.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } +.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } +.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } +.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } +.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } +.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } +.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } +.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } +.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } +.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } +.@{fa-css-prefix}-map:before { content: @fa-var-map; } +.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } +.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } +.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } +.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } +.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } +.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } +.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; } +.@{fa-css-prefix}-edge:before { content: @fa-var-edge; } +.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; } +.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; } +.@{fa-css-prefix}-modx:before { content: @fa-var-modx; } +.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; } +.@{fa-css-prefix}-usb:before { content: @fa-var-usb; } +.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; } +.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } +.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; } +.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; } +.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; } +.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; } +.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; } +.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } +.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } +.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } +.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; } +.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; } +.@{fa-css-prefix}-percent:before { content: @fa-var-percent; } +.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; } +.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; } +.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; } +.@{fa-css-prefix}-envira:before { content: @fa-var-envira; } +.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } +.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; } +.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; } +.@{fa-css-prefix}-blind:before { content: @fa-var-blind; } +.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; } +.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; } +.@{fa-css-prefix}-braille:before { content: @fa-var-braille; } +.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; } +.@{fa-css-prefix}-asl-interpreting:before, +.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; } +.@{fa-css-prefix}-deafness:before, +.@{fa-css-prefix}-hard-of-hearing:before, +.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } +.@{fa-css-prefix}-glide:before { content: @fa-var-glide; } +.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; } +.@{fa-css-prefix}-signing:before, +.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; } +.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; } +.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; } +.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; } +.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; } +.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; } +.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; } +.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } +.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } +.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; } +.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; } +.@{fa-css-prefix}-google-plus-circle:before, +.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; } +.@{fa-css-prefix}-fa:before, +.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; } +.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; } +.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; } +.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; } +.@{fa-css-prefix}-linode:before { content: @fa-var-linode; } +.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; } +.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; } +.@{fa-css-prefix}-vcard:before, +.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; } +.@{fa-css-prefix}-vcard-o:before, +.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; } +.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; } +.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; } +.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; } +.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; } +.@{fa-css-prefix}-drivers-license:before, +.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; } +.@{fa-css-prefix}-drivers-license-o:before, +.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; } +.@{fa-css-prefix}-quora:before { content: @fa-var-quora; } +.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; } +.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; } +.@{fa-css-prefix}-thermometer-4:before, +.@{fa-css-prefix}-thermometer:before, +.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; } +.@{fa-css-prefix}-thermometer-3:before, +.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; } +.@{fa-css-prefix}-thermometer-2:before, +.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; } +.@{fa-css-prefix}-thermometer-1:before, +.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; } +.@{fa-css-prefix}-thermometer-0:before, +.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; } +.@{fa-css-prefix}-shower:before { content: @fa-var-shower; } +.@{fa-css-prefix}-bathtub:before, +.@{fa-css-prefix}-s15:before, +.@{fa-css-prefix}-bath:before { content: @fa-var-bath; } +.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; } +.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; } +.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; } +.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; } +.@{fa-css-prefix}-times-rectangle:before, +.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; } +.@{fa-css-prefix}-times-rectangle-o:before, +.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; } +.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; } +.@{fa-css-prefix}-grav:before { content: @fa-var-grav; } +.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; } +.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; } +.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; } +.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; } +.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; } +.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; } +.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; } +.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; } +.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; } diff --git a/js/font-awesome/less/larger.less b/js/font-awesome/less/larger.less new file mode 100644 index 000000000..c9d646770 --- /dev/null +++ b/js/font-awesome/less/larger.less @@ -0,0 +1,13 @@ +// 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: -15%; +} +.@{fa-css-prefix}-2x { font-size: 2em; } +.@{fa-css-prefix}-3x { font-size: 3em; } +.@{fa-css-prefix}-4x { font-size: 4em; } +.@{fa-css-prefix}-5x { font-size: 5em; } diff --git a/js/font-awesome/less/list.less b/js/font-awesome/less/list.less new file mode 100644 index 000000000..0b440382f --- /dev/null +++ b/js/font-awesome/less/list.less @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.@{fa-css-prefix}-ul { + padding-left: 0; + margin-left: @fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.@{fa-css-prefix}-li { + position: absolute; + left: -@fa-li-width; + width: @fa-li-width; + top: (2em / 14); + text-align: center; + &.@{fa-css-prefix}-lg { + left: (-@fa-li-width + (4em / 14)); + } +} diff --git a/js/font-awesome/less/mixins.less b/js/font-awesome/less/mixins.less new file mode 100644 index 000000000..beef231d0 --- /dev/null +++ b/js/font-awesome/less/mixins.less @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +.fa-icon() { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +.fa-icon-rotate(@degrees, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); + transform: rotate(@degrees); +} + +.fa-icon-flip(@horiz, @vert, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; + -webkit-transform: scale(@horiz, @vert); + -ms-transform: scale(@horiz, @vert); + transform: scale(@horiz, @vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +.sr-only() { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// 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 + +.sr-only-focusable() { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/js/font-awesome/less/path.less b/js/font-awesome/less/path.less new file mode 100644 index 000000000..835be41f8 --- /dev/null +++ b/js/font-awesome/less/path.less @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); + src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), + url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), + url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), + url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), + url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); + // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/js/font-awesome/less/rotated-flipped.less b/js/font-awesome/less/rotated-flipped.less new file mode 100644 index 000000000..f6ba81475 --- /dev/null +++ b/js/font-awesome/less/rotated-flipped.less @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } +.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } +.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } + +.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } +.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .@{fa-css-prefix}-rotate-90, +:root .@{fa-css-prefix}-rotate-180, +:root .@{fa-css-prefix}-rotate-270, +:root .@{fa-css-prefix}-flip-horizontal, +:root .@{fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/js/font-awesome/less/screen-reader.less b/js/font-awesome/less/screen-reader.less new file mode 100644 index 000000000..11c188196 --- /dev/null +++ b/js/font-awesome/less/screen-reader.less @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { .sr-only(); } +.sr-only-focusable { .sr-only-focusable(); } diff --git a/js/font-awesome/less/stacked.less b/js/font-awesome/less/stacked.less new file mode 100644 index 000000000..fc53fb0e7 --- /dev/null +++ b/js/font-awesome/less/stacked.less @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.@{fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.@{fa-css-prefix}-stack-1x { line-height: inherit; } +.@{fa-css-prefix}-stack-2x { font-size: 2em; } +.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/js/font-awesome/less/variables.less b/js/font-awesome/less/variables.less new file mode 100644 index 000000000..7ddbbc011 --- /dev/null +++ b/js/font-awesome/less/variables.less @@ -0,0 +1,800 @@ +// Variables +// -------------------------- + +@fa-font-path: "../fonts"; +@fa-font-size-base: 14px; +@fa-line-height-base: 1; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly +@fa-css-prefix: fa; +@fa-version: "4.7.0"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: (30em / 14); + +@fa-var-500px: "\f26e"; +@fa-var-address-book: "\f2b9"; +@fa-var-address-book-o: "\f2ba"; +@fa-var-address-card: "\f2bb"; +@fa-var-address-card-o: "\f2bc"; +@fa-var-adjust: "\f042"; +@fa-var-adn: "\f170"; +@fa-var-align-center: "\f037"; +@fa-var-align-justify: "\f039"; +@fa-var-align-left: "\f036"; +@fa-var-align-right: "\f038"; +@fa-var-amazon: "\f270"; +@fa-var-ambulance: "\f0f9"; +@fa-var-american-sign-language-interpreting: "\f2a3"; +@fa-var-anchor: "\f13d"; +@fa-var-android: "\f17b"; +@fa-var-angellist: "\f209"; +@fa-var-angle-double-down: "\f103"; +@fa-var-angle-double-left: "\f100"; +@fa-var-angle-double-right: "\f101"; +@fa-var-angle-double-up: "\f102"; +@fa-var-angle-down: "\f107"; +@fa-var-angle-left: "\f104"; +@fa-var-angle-right: "\f105"; +@fa-var-angle-up: "\f106"; +@fa-var-apple: "\f179"; +@fa-var-archive: "\f187"; +@fa-var-area-chart: "\f1fe"; +@fa-var-arrow-circle-down: "\f0ab"; +@fa-var-arrow-circle-left: "\f0a8"; +@fa-var-arrow-circle-o-down: "\f01a"; +@fa-var-arrow-circle-o-left: "\f190"; +@fa-var-arrow-circle-o-right: "\f18e"; +@fa-var-arrow-circle-o-up: "\f01b"; +@fa-var-arrow-circle-right: "\f0a9"; +@fa-var-arrow-circle-up: "\f0aa"; +@fa-var-arrow-down: "\f063"; +@fa-var-arrow-left: "\f060"; +@fa-var-arrow-right: "\f061"; +@fa-var-arrow-up: "\f062"; +@fa-var-arrows: "\f047"; +@fa-var-arrows-alt: "\f0b2"; +@fa-var-arrows-h: "\f07e"; +@fa-var-arrows-v: "\f07d"; +@fa-var-asl-interpreting: "\f2a3"; +@fa-var-assistive-listening-systems: "\f2a2"; +@fa-var-asterisk: "\f069"; +@fa-var-at: "\f1fa"; +@fa-var-audio-description: "\f29e"; +@fa-var-automobile: "\f1b9"; +@fa-var-backward: "\f04a"; +@fa-var-balance-scale: "\f24e"; +@fa-var-ban: "\f05e"; +@fa-var-bandcamp: "\f2d5"; +@fa-var-bank: "\f19c"; +@fa-var-bar-chart: "\f080"; +@fa-var-bar-chart-o: "\f080"; +@fa-var-barcode: "\f02a"; +@fa-var-bars: "\f0c9"; +@fa-var-bath: "\f2cd"; +@fa-var-bathtub: "\f2cd"; +@fa-var-battery: "\f240"; +@fa-var-battery-0: "\f244"; +@fa-var-battery-1: "\f243"; +@fa-var-battery-2: "\f242"; +@fa-var-battery-3: "\f241"; +@fa-var-battery-4: "\f240"; +@fa-var-battery-empty: "\f244"; +@fa-var-battery-full: "\f240"; +@fa-var-battery-half: "\f242"; +@fa-var-battery-quarter: "\f243"; +@fa-var-battery-three-quarters: "\f241"; +@fa-var-bed: "\f236"; +@fa-var-beer: "\f0fc"; +@fa-var-behance: "\f1b4"; +@fa-var-behance-square: "\f1b5"; +@fa-var-bell: "\f0f3"; +@fa-var-bell-o: "\f0a2"; +@fa-var-bell-slash: "\f1f6"; +@fa-var-bell-slash-o: "\f1f7"; +@fa-var-bicycle: "\f206"; +@fa-var-binoculars: "\f1e5"; +@fa-var-birthday-cake: "\f1fd"; +@fa-var-bitbucket: "\f171"; +@fa-var-bitbucket-square: "\f172"; +@fa-var-bitcoin: "\f15a"; +@fa-var-black-tie: "\f27e"; +@fa-var-blind: "\f29d"; +@fa-var-bluetooth: "\f293"; +@fa-var-bluetooth-b: "\f294"; +@fa-var-bold: "\f032"; +@fa-var-bolt: "\f0e7"; +@fa-var-bomb: "\f1e2"; +@fa-var-book: "\f02d"; +@fa-var-bookmark: "\f02e"; +@fa-var-bookmark-o: "\f097"; +@fa-var-braille: "\f2a1"; +@fa-var-briefcase: "\f0b1"; +@fa-var-btc: "\f15a"; +@fa-var-bug: "\f188"; +@fa-var-building: "\f1ad"; +@fa-var-building-o: "\f0f7"; +@fa-var-bullhorn: "\f0a1"; +@fa-var-bullseye: "\f140"; +@fa-var-bus: "\f207"; +@fa-var-buysellads: "\f20d"; +@fa-var-cab: "\f1ba"; +@fa-var-calculator: "\f1ec"; +@fa-var-calendar: "\f073"; +@fa-var-calendar-check-o: "\f274"; +@fa-var-calendar-minus-o: "\f272"; +@fa-var-calendar-o: "\f133"; +@fa-var-calendar-plus-o: "\f271"; +@fa-var-calendar-times-o: "\f273"; +@fa-var-camera: "\f030"; +@fa-var-camera-retro: "\f083"; +@fa-var-car: "\f1b9"; +@fa-var-caret-down: "\f0d7"; +@fa-var-caret-left: "\f0d9"; +@fa-var-caret-right: "\f0da"; +@fa-var-caret-square-o-down: "\f150"; +@fa-var-caret-square-o-left: "\f191"; +@fa-var-caret-square-o-right: "\f152"; +@fa-var-caret-square-o-up: "\f151"; +@fa-var-caret-up: "\f0d8"; +@fa-var-cart-arrow-down: "\f218"; +@fa-var-cart-plus: "\f217"; +@fa-var-cc: "\f20a"; +@fa-var-cc-amex: "\f1f3"; +@fa-var-cc-diners-club: "\f24c"; +@fa-var-cc-discover: "\f1f2"; +@fa-var-cc-jcb: "\f24b"; +@fa-var-cc-mastercard: "\f1f1"; +@fa-var-cc-paypal: "\f1f4"; +@fa-var-cc-stripe: "\f1f5"; +@fa-var-cc-visa: "\f1f0"; +@fa-var-certificate: "\f0a3"; +@fa-var-chain: "\f0c1"; +@fa-var-chain-broken: "\f127"; +@fa-var-check: "\f00c"; +@fa-var-check-circle: "\f058"; +@fa-var-check-circle-o: "\f05d"; +@fa-var-check-square: "\f14a"; +@fa-var-check-square-o: "\f046"; +@fa-var-chevron-circle-down: "\f13a"; +@fa-var-chevron-circle-left: "\f137"; +@fa-var-chevron-circle-right: "\f138"; +@fa-var-chevron-circle-up: "\f139"; +@fa-var-chevron-down: "\f078"; +@fa-var-chevron-left: "\f053"; +@fa-var-chevron-right: "\f054"; +@fa-var-chevron-up: "\f077"; +@fa-var-child: "\f1ae"; +@fa-var-chrome: "\f268"; +@fa-var-circle: "\f111"; +@fa-var-circle-o: "\f10c"; +@fa-var-circle-o-notch: "\f1ce"; +@fa-var-circle-thin: "\f1db"; +@fa-var-clipboard: "\f0ea"; +@fa-var-clock-o: "\f017"; +@fa-var-clone: "\f24d"; +@fa-var-close: "\f00d"; +@fa-var-cloud: "\f0c2"; +@fa-var-cloud-download: "\f0ed"; +@fa-var-cloud-upload: "\f0ee"; +@fa-var-cny: "\f157"; +@fa-var-code: "\f121"; +@fa-var-code-fork: "\f126"; +@fa-var-codepen: "\f1cb"; +@fa-var-codiepie: "\f284"; +@fa-var-coffee: "\f0f4"; +@fa-var-cog: "\f013"; +@fa-var-cogs: "\f085"; +@fa-var-columns: "\f0db"; +@fa-var-comment: "\f075"; +@fa-var-comment-o: "\f0e5"; +@fa-var-commenting: "\f27a"; +@fa-var-commenting-o: "\f27b"; +@fa-var-comments: "\f086"; +@fa-var-comments-o: "\f0e6"; +@fa-var-compass: "\f14e"; +@fa-var-compress: "\f066"; +@fa-var-connectdevelop: "\f20e"; +@fa-var-contao: "\f26d"; +@fa-var-copy: "\f0c5"; +@fa-var-copyright: "\f1f9"; +@fa-var-creative-commons: "\f25e"; +@fa-var-credit-card: "\f09d"; +@fa-var-credit-card-alt: "\f283"; +@fa-var-crop: "\f125"; +@fa-var-crosshairs: "\f05b"; +@fa-var-css3: "\f13c"; +@fa-var-cube: "\f1b2"; +@fa-var-cubes: "\f1b3"; +@fa-var-cut: "\f0c4"; +@fa-var-cutlery: "\f0f5"; +@fa-var-dashboard: "\f0e4"; +@fa-var-dashcube: "\f210"; +@fa-var-database: "\f1c0"; +@fa-var-deaf: "\f2a4"; +@fa-var-deafness: "\f2a4"; +@fa-var-dedent: "\f03b"; +@fa-var-delicious: "\f1a5"; +@fa-var-desktop: "\f108"; +@fa-var-deviantart: "\f1bd"; +@fa-var-diamond: "\f219"; +@fa-var-digg: "\f1a6"; +@fa-var-dollar: "\f155"; +@fa-var-dot-circle-o: "\f192"; +@fa-var-download: "\f019"; +@fa-var-dribbble: "\f17d"; +@fa-var-drivers-license: "\f2c2"; +@fa-var-drivers-license-o: "\f2c3"; +@fa-var-dropbox: "\f16b"; +@fa-var-drupal: "\f1a9"; +@fa-var-edge: "\f282"; +@fa-var-edit: "\f044"; +@fa-var-eercast: "\f2da"; +@fa-var-eject: "\f052"; +@fa-var-ellipsis-h: "\f141"; +@fa-var-ellipsis-v: "\f142"; +@fa-var-empire: "\f1d1"; +@fa-var-envelope: "\f0e0"; +@fa-var-envelope-o: "\f003"; +@fa-var-envelope-open: "\f2b6"; +@fa-var-envelope-open-o: "\f2b7"; +@fa-var-envelope-square: "\f199"; +@fa-var-envira: "\f299"; +@fa-var-eraser: "\f12d"; +@fa-var-etsy: "\f2d7"; +@fa-var-eur: "\f153"; +@fa-var-euro: "\f153"; +@fa-var-exchange: "\f0ec"; +@fa-var-exclamation: "\f12a"; +@fa-var-exclamation-circle: "\f06a"; +@fa-var-exclamation-triangle: "\f071"; +@fa-var-expand: "\f065"; +@fa-var-expeditedssl: "\f23e"; +@fa-var-external-link: "\f08e"; +@fa-var-external-link-square: "\f14c"; +@fa-var-eye: "\f06e"; +@fa-var-eye-slash: "\f070"; +@fa-var-eyedropper: "\f1fb"; +@fa-var-fa: "\f2b4"; +@fa-var-facebook: "\f09a"; +@fa-var-facebook-f: "\f09a"; +@fa-var-facebook-official: "\f230"; +@fa-var-facebook-square: "\f082"; +@fa-var-fast-backward: "\f049"; +@fa-var-fast-forward: "\f050"; +@fa-var-fax: "\f1ac"; +@fa-var-feed: "\f09e"; +@fa-var-female: "\f182"; +@fa-var-fighter-jet: "\f0fb"; +@fa-var-file: "\f15b"; +@fa-var-file-archive-o: "\f1c6"; +@fa-var-file-audio-o: "\f1c7"; +@fa-var-file-code-o: "\f1c9"; +@fa-var-file-excel-o: "\f1c3"; +@fa-var-file-image-o: "\f1c5"; +@fa-var-file-movie-o: "\f1c8"; +@fa-var-file-o: "\f016"; +@fa-var-file-pdf-o: "\f1c1"; +@fa-var-file-photo-o: "\f1c5"; +@fa-var-file-picture-o: "\f1c5"; +@fa-var-file-powerpoint-o: "\f1c4"; +@fa-var-file-sound-o: "\f1c7"; +@fa-var-file-text: "\f15c"; +@fa-var-file-text-o: "\f0f6"; +@fa-var-file-video-o: "\f1c8"; +@fa-var-file-word-o: "\f1c2"; +@fa-var-file-zip-o: "\f1c6"; +@fa-var-files-o: "\f0c5"; +@fa-var-film: "\f008"; +@fa-var-filter: "\f0b0"; +@fa-var-fire: "\f06d"; +@fa-var-fire-extinguisher: "\f134"; +@fa-var-firefox: "\f269"; +@fa-var-first-order: "\f2b0"; +@fa-var-flag: "\f024"; +@fa-var-flag-checkered: "\f11e"; +@fa-var-flag-o: "\f11d"; +@fa-var-flash: "\f0e7"; +@fa-var-flask: "\f0c3"; +@fa-var-flickr: "\f16e"; +@fa-var-floppy-o: "\f0c7"; +@fa-var-folder: "\f07b"; +@fa-var-folder-o: "\f114"; +@fa-var-folder-open: "\f07c"; +@fa-var-folder-open-o: "\f115"; +@fa-var-font: "\f031"; +@fa-var-font-awesome: "\f2b4"; +@fa-var-fonticons: "\f280"; +@fa-var-fort-awesome: "\f286"; +@fa-var-forumbee: "\f211"; +@fa-var-forward: "\f04e"; +@fa-var-foursquare: "\f180"; +@fa-var-free-code-camp: "\f2c5"; +@fa-var-frown-o: "\f119"; +@fa-var-futbol-o: "\f1e3"; +@fa-var-gamepad: "\f11b"; +@fa-var-gavel: "\f0e3"; +@fa-var-gbp: "\f154"; +@fa-var-ge: "\f1d1"; +@fa-var-gear: "\f013"; +@fa-var-gears: "\f085"; +@fa-var-genderless: "\f22d"; +@fa-var-get-pocket: "\f265"; +@fa-var-gg: "\f260"; +@fa-var-gg-circle: "\f261"; +@fa-var-gift: "\f06b"; +@fa-var-git: "\f1d3"; +@fa-var-git-square: "\f1d2"; +@fa-var-github: "\f09b"; +@fa-var-github-alt: "\f113"; +@fa-var-github-square: "\f092"; +@fa-var-gitlab: "\f296"; +@fa-var-gittip: "\f184"; +@fa-var-glass: "\f000"; +@fa-var-glide: "\f2a5"; +@fa-var-glide-g: "\f2a6"; +@fa-var-globe: "\f0ac"; +@fa-var-google: "\f1a0"; +@fa-var-google-plus: "\f0d5"; +@fa-var-google-plus-circle: "\f2b3"; +@fa-var-google-plus-official: "\f2b3"; +@fa-var-google-plus-square: "\f0d4"; +@fa-var-google-wallet: "\f1ee"; +@fa-var-graduation-cap: "\f19d"; +@fa-var-gratipay: "\f184"; +@fa-var-grav: "\f2d6"; +@fa-var-group: "\f0c0"; +@fa-var-h-square: "\f0fd"; +@fa-var-hacker-news: "\f1d4"; +@fa-var-hand-grab-o: "\f255"; +@fa-var-hand-lizard-o: "\f258"; +@fa-var-hand-o-down: "\f0a7"; +@fa-var-hand-o-left: "\f0a5"; +@fa-var-hand-o-right: "\f0a4"; +@fa-var-hand-o-up: "\f0a6"; +@fa-var-hand-paper-o: "\f256"; +@fa-var-hand-peace-o: "\f25b"; +@fa-var-hand-pointer-o: "\f25a"; +@fa-var-hand-rock-o: "\f255"; +@fa-var-hand-scissors-o: "\f257"; +@fa-var-hand-spock-o: "\f259"; +@fa-var-hand-stop-o: "\f256"; +@fa-var-handshake-o: "\f2b5"; +@fa-var-hard-of-hearing: "\f2a4"; +@fa-var-hashtag: "\f292"; +@fa-var-hdd-o: "\f0a0"; +@fa-var-header: "\f1dc"; +@fa-var-headphones: "\f025"; +@fa-var-heart: "\f004"; +@fa-var-heart-o: "\f08a"; +@fa-var-heartbeat: "\f21e"; +@fa-var-history: "\f1da"; +@fa-var-home: "\f015"; +@fa-var-hospital-o: "\f0f8"; +@fa-var-hotel: "\f236"; +@fa-var-hourglass: "\f254"; +@fa-var-hourglass-1: "\f251"; +@fa-var-hourglass-2: "\f252"; +@fa-var-hourglass-3: "\f253"; +@fa-var-hourglass-end: "\f253"; +@fa-var-hourglass-half: "\f252"; +@fa-var-hourglass-o: "\f250"; +@fa-var-hourglass-start: "\f251"; +@fa-var-houzz: "\f27c"; +@fa-var-html5: "\f13b"; +@fa-var-i-cursor: "\f246"; +@fa-var-id-badge: "\f2c1"; +@fa-var-id-card: "\f2c2"; +@fa-var-id-card-o: "\f2c3"; +@fa-var-ils: "\f20b"; +@fa-var-image: "\f03e"; +@fa-var-imdb: "\f2d8"; +@fa-var-inbox: "\f01c"; +@fa-var-indent: "\f03c"; +@fa-var-industry: "\f275"; +@fa-var-info: "\f129"; +@fa-var-info-circle: "\f05a"; +@fa-var-inr: "\f156"; +@fa-var-instagram: "\f16d"; +@fa-var-institution: "\f19c"; +@fa-var-internet-explorer: "\f26b"; +@fa-var-intersex: "\f224"; +@fa-var-ioxhost: "\f208"; +@fa-var-italic: "\f033"; +@fa-var-joomla: "\f1aa"; +@fa-var-jpy: "\f157"; +@fa-var-jsfiddle: "\f1cc"; +@fa-var-key: "\f084"; +@fa-var-keyboard-o: "\f11c"; +@fa-var-krw: "\f159"; +@fa-var-language: "\f1ab"; +@fa-var-laptop: "\f109"; +@fa-var-lastfm: "\f202"; +@fa-var-lastfm-square: "\f203"; +@fa-var-leaf: "\f06c"; +@fa-var-leanpub: "\f212"; +@fa-var-legal: "\f0e3"; +@fa-var-lemon-o: "\f094"; +@fa-var-level-down: "\f149"; +@fa-var-level-up: "\f148"; +@fa-var-life-bouy: "\f1cd"; +@fa-var-life-buoy: "\f1cd"; +@fa-var-life-ring: "\f1cd"; +@fa-var-life-saver: "\f1cd"; +@fa-var-lightbulb-o: "\f0eb"; +@fa-var-line-chart: "\f201"; +@fa-var-link: "\f0c1"; +@fa-var-linkedin: "\f0e1"; +@fa-var-linkedin-square: "\f08c"; +@fa-var-linode: "\f2b8"; +@fa-var-linux: "\f17c"; +@fa-var-list: "\f03a"; +@fa-var-list-alt: "\f022"; +@fa-var-list-ol: "\f0cb"; +@fa-var-list-ul: "\f0ca"; +@fa-var-location-arrow: "\f124"; +@fa-var-lock: "\f023"; +@fa-var-long-arrow-down: "\f175"; +@fa-var-long-arrow-left: "\f177"; +@fa-var-long-arrow-right: "\f178"; +@fa-var-long-arrow-up: "\f176"; +@fa-var-low-vision: "\f2a8"; +@fa-var-magic: "\f0d0"; +@fa-var-magnet: "\f076"; +@fa-var-mail-forward: "\f064"; +@fa-var-mail-reply: "\f112"; +@fa-var-mail-reply-all: "\f122"; +@fa-var-male: "\f183"; +@fa-var-map: "\f279"; +@fa-var-map-marker: "\f041"; +@fa-var-map-o: "\f278"; +@fa-var-map-pin: "\f276"; +@fa-var-map-signs: "\f277"; +@fa-var-mars: "\f222"; +@fa-var-mars-double: "\f227"; +@fa-var-mars-stroke: "\f229"; +@fa-var-mars-stroke-h: "\f22b"; +@fa-var-mars-stroke-v: "\f22a"; +@fa-var-maxcdn: "\f136"; +@fa-var-meanpath: "\f20c"; +@fa-var-medium: "\f23a"; +@fa-var-medkit: "\f0fa"; +@fa-var-meetup: "\f2e0"; +@fa-var-meh-o: "\f11a"; +@fa-var-mercury: "\f223"; +@fa-var-microchip: "\f2db"; +@fa-var-microphone: "\f130"; +@fa-var-microphone-slash: "\f131"; +@fa-var-minus: "\f068"; +@fa-var-minus-circle: "\f056"; +@fa-var-minus-square: "\f146"; +@fa-var-minus-square-o: "\f147"; +@fa-var-mixcloud: "\f289"; +@fa-var-mobile: "\f10b"; +@fa-var-mobile-phone: "\f10b"; +@fa-var-modx: "\f285"; +@fa-var-money: "\f0d6"; +@fa-var-moon-o: "\f186"; +@fa-var-mortar-board: "\f19d"; +@fa-var-motorcycle: "\f21c"; +@fa-var-mouse-pointer: "\f245"; +@fa-var-music: "\f001"; +@fa-var-navicon: "\f0c9"; +@fa-var-neuter: "\f22c"; +@fa-var-newspaper-o: "\f1ea"; +@fa-var-object-group: "\f247"; +@fa-var-object-ungroup: "\f248"; +@fa-var-odnoklassniki: "\f263"; +@fa-var-odnoklassniki-square: "\f264"; +@fa-var-opencart: "\f23d"; +@fa-var-openid: "\f19b"; +@fa-var-opera: "\f26a"; +@fa-var-optin-monster: "\f23c"; +@fa-var-outdent: "\f03b"; +@fa-var-pagelines: "\f18c"; +@fa-var-paint-brush: "\f1fc"; +@fa-var-paper-plane: "\f1d8"; +@fa-var-paper-plane-o: "\f1d9"; +@fa-var-paperclip: "\f0c6"; +@fa-var-paragraph: "\f1dd"; +@fa-var-paste: "\f0ea"; +@fa-var-pause: "\f04c"; +@fa-var-pause-circle: "\f28b"; +@fa-var-pause-circle-o: "\f28c"; +@fa-var-paw: "\f1b0"; +@fa-var-paypal: "\f1ed"; +@fa-var-pencil: "\f040"; +@fa-var-pencil-square: "\f14b"; +@fa-var-pencil-square-o: "\f044"; +@fa-var-percent: "\f295"; +@fa-var-phone: "\f095"; +@fa-var-phone-square: "\f098"; +@fa-var-photo: "\f03e"; +@fa-var-picture-o: "\f03e"; +@fa-var-pie-chart: "\f200"; +@fa-var-pied-piper: "\f2ae"; +@fa-var-pied-piper-alt: "\f1a8"; +@fa-var-pied-piper-pp: "\f1a7"; +@fa-var-pinterest: "\f0d2"; +@fa-var-pinterest-p: "\f231"; +@fa-var-pinterest-square: "\f0d3"; +@fa-var-plane: "\f072"; +@fa-var-play: "\f04b"; +@fa-var-play-circle: "\f144"; +@fa-var-play-circle-o: "\f01d"; +@fa-var-plug: "\f1e6"; +@fa-var-plus: "\f067"; +@fa-var-plus-circle: "\f055"; +@fa-var-plus-square: "\f0fe"; +@fa-var-plus-square-o: "\f196"; +@fa-var-podcast: "\f2ce"; +@fa-var-power-off: "\f011"; +@fa-var-print: "\f02f"; +@fa-var-product-hunt: "\f288"; +@fa-var-puzzle-piece: "\f12e"; +@fa-var-qq: "\f1d6"; +@fa-var-qrcode: "\f029"; +@fa-var-question: "\f128"; +@fa-var-question-circle: "\f059"; +@fa-var-question-circle-o: "\f29c"; +@fa-var-quora: "\f2c4"; +@fa-var-quote-left: "\f10d"; +@fa-var-quote-right: "\f10e"; +@fa-var-ra: "\f1d0"; +@fa-var-random: "\f074"; +@fa-var-ravelry: "\f2d9"; +@fa-var-rebel: "\f1d0"; +@fa-var-recycle: "\f1b8"; +@fa-var-reddit: "\f1a1"; +@fa-var-reddit-alien: "\f281"; +@fa-var-reddit-square: "\f1a2"; +@fa-var-refresh: "\f021"; +@fa-var-registered: "\f25d"; +@fa-var-remove: "\f00d"; +@fa-var-renren: "\f18b"; +@fa-var-reorder: "\f0c9"; +@fa-var-repeat: "\f01e"; +@fa-var-reply: "\f112"; +@fa-var-reply-all: "\f122"; +@fa-var-resistance: "\f1d0"; +@fa-var-retweet: "\f079"; +@fa-var-rmb: "\f157"; +@fa-var-road: "\f018"; +@fa-var-rocket: "\f135"; +@fa-var-rotate-left: "\f0e2"; +@fa-var-rotate-right: "\f01e"; +@fa-var-rouble: "\f158"; +@fa-var-rss: "\f09e"; +@fa-var-rss-square: "\f143"; +@fa-var-rub: "\f158"; +@fa-var-ruble: "\f158"; +@fa-var-rupee: "\f156"; +@fa-var-s15: "\f2cd"; +@fa-var-safari: "\f267"; +@fa-var-save: "\f0c7"; +@fa-var-scissors: "\f0c4"; +@fa-var-scribd: "\f28a"; +@fa-var-search: "\f002"; +@fa-var-search-minus: "\f010"; +@fa-var-search-plus: "\f00e"; +@fa-var-sellsy: "\f213"; +@fa-var-send: "\f1d8"; +@fa-var-send-o: "\f1d9"; +@fa-var-server: "\f233"; +@fa-var-share: "\f064"; +@fa-var-share-alt: "\f1e0"; +@fa-var-share-alt-square: "\f1e1"; +@fa-var-share-square: "\f14d"; +@fa-var-share-square-o: "\f045"; +@fa-var-shekel: "\f20b"; +@fa-var-sheqel: "\f20b"; +@fa-var-shield: "\f132"; +@fa-var-ship: "\f21a"; +@fa-var-shirtsinbulk: "\f214"; +@fa-var-shopping-bag: "\f290"; +@fa-var-shopping-basket: "\f291"; +@fa-var-shopping-cart: "\f07a"; +@fa-var-shower: "\f2cc"; +@fa-var-sign-in: "\f090"; +@fa-var-sign-language: "\f2a7"; +@fa-var-sign-out: "\f08b"; +@fa-var-signal: "\f012"; +@fa-var-signing: "\f2a7"; +@fa-var-simplybuilt: "\f215"; +@fa-var-sitemap: "\f0e8"; +@fa-var-skyatlas: "\f216"; +@fa-var-skype: "\f17e"; +@fa-var-slack: "\f198"; +@fa-var-sliders: "\f1de"; +@fa-var-slideshare: "\f1e7"; +@fa-var-smile-o: "\f118"; +@fa-var-snapchat: "\f2ab"; +@fa-var-snapchat-ghost: "\f2ac"; +@fa-var-snapchat-square: "\f2ad"; +@fa-var-snowflake-o: "\f2dc"; +@fa-var-soccer-ball-o: "\f1e3"; +@fa-var-sort: "\f0dc"; +@fa-var-sort-alpha-asc: "\f15d"; +@fa-var-sort-alpha-desc: "\f15e"; +@fa-var-sort-amount-asc: "\f160"; +@fa-var-sort-amount-desc: "\f161"; +@fa-var-sort-asc: "\f0de"; +@fa-var-sort-desc: "\f0dd"; +@fa-var-sort-down: "\f0dd"; +@fa-var-sort-numeric-asc: "\f162"; +@fa-var-sort-numeric-desc: "\f163"; +@fa-var-sort-up: "\f0de"; +@fa-var-soundcloud: "\f1be"; +@fa-var-space-shuttle: "\f197"; +@fa-var-spinner: "\f110"; +@fa-var-spoon: "\f1b1"; +@fa-var-spotify: "\f1bc"; +@fa-var-square: "\f0c8"; +@fa-var-square-o: "\f096"; +@fa-var-stack-exchange: "\f18d"; +@fa-var-stack-overflow: "\f16c"; +@fa-var-star: "\f005"; +@fa-var-star-half: "\f089"; +@fa-var-star-half-empty: "\f123"; +@fa-var-star-half-full: "\f123"; +@fa-var-star-half-o: "\f123"; +@fa-var-star-o: "\f006"; +@fa-var-steam: "\f1b6"; +@fa-var-steam-square: "\f1b7"; +@fa-var-step-backward: "\f048"; +@fa-var-step-forward: "\f051"; +@fa-var-stethoscope: "\f0f1"; +@fa-var-sticky-note: "\f249"; +@fa-var-sticky-note-o: "\f24a"; +@fa-var-stop: "\f04d"; +@fa-var-stop-circle: "\f28d"; +@fa-var-stop-circle-o: "\f28e"; +@fa-var-street-view: "\f21d"; +@fa-var-strikethrough: "\f0cc"; +@fa-var-stumbleupon: "\f1a4"; +@fa-var-stumbleupon-circle: "\f1a3"; +@fa-var-subscript: "\f12c"; +@fa-var-subway: "\f239"; +@fa-var-suitcase: "\f0f2"; +@fa-var-sun-o: "\f185"; +@fa-var-superpowers: "\f2dd"; +@fa-var-superscript: "\f12b"; +@fa-var-support: "\f1cd"; +@fa-var-table: "\f0ce"; +@fa-var-tablet: "\f10a"; +@fa-var-tachometer: "\f0e4"; +@fa-var-tag: "\f02b"; +@fa-var-tags: "\f02c"; +@fa-var-tasks: "\f0ae"; +@fa-var-taxi: "\f1ba"; +@fa-var-telegram: "\f2c6"; +@fa-var-television: "\f26c"; +@fa-var-tencent-weibo: "\f1d5"; +@fa-var-terminal: "\f120"; +@fa-var-text-height: "\f034"; +@fa-var-text-width: "\f035"; +@fa-var-th: "\f00a"; +@fa-var-th-large: "\f009"; +@fa-var-th-list: "\f00b"; +@fa-var-themeisle: "\f2b2"; +@fa-var-thermometer: "\f2c7"; +@fa-var-thermometer-0: "\f2cb"; +@fa-var-thermometer-1: "\f2ca"; +@fa-var-thermometer-2: "\f2c9"; +@fa-var-thermometer-3: "\f2c8"; +@fa-var-thermometer-4: "\f2c7"; +@fa-var-thermometer-empty: "\f2cb"; +@fa-var-thermometer-full: "\f2c7"; +@fa-var-thermometer-half: "\f2c9"; +@fa-var-thermometer-quarter: "\f2ca"; +@fa-var-thermometer-three-quarters: "\f2c8"; +@fa-var-thumb-tack: "\f08d"; +@fa-var-thumbs-down: "\f165"; +@fa-var-thumbs-o-down: "\f088"; +@fa-var-thumbs-o-up: "\f087"; +@fa-var-thumbs-up: "\f164"; +@fa-var-ticket: "\f145"; +@fa-var-times: "\f00d"; +@fa-var-times-circle: "\f057"; +@fa-var-times-circle-o: "\f05c"; +@fa-var-times-rectangle: "\f2d3"; +@fa-var-times-rectangle-o: "\f2d4"; +@fa-var-tint: "\f043"; +@fa-var-toggle-down: "\f150"; +@fa-var-toggle-left: "\f191"; +@fa-var-toggle-off: "\f204"; +@fa-var-toggle-on: "\f205"; +@fa-var-toggle-right: "\f152"; +@fa-var-toggle-up: "\f151"; +@fa-var-trademark: "\f25c"; +@fa-var-train: "\f238"; +@fa-var-transgender: "\f224"; +@fa-var-transgender-alt: "\f225"; +@fa-var-trash: "\f1f8"; +@fa-var-trash-o: "\f014"; +@fa-var-tree: "\f1bb"; +@fa-var-trello: "\f181"; +@fa-var-tripadvisor: "\f262"; +@fa-var-trophy: "\f091"; +@fa-var-truck: "\f0d1"; +@fa-var-try: "\f195"; +@fa-var-tty: "\f1e4"; +@fa-var-tumblr: "\f173"; +@fa-var-tumblr-square: "\f174"; +@fa-var-turkish-lira: "\f195"; +@fa-var-tv: "\f26c"; +@fa-var-twitch: "\f1e8"; +@fa-var-twitter: "\f099"; +@fa-var-twitter-square: "\f081"; +@fa-var-umbrella: "\f0e9"; +@fa-var-underline: "\f0cd"; +@fa-var-undo: "\f0e2"; +@fa-var-universal-access: "\f29a"; +@fa-var-university: "\f19c"; +@fa-var-unlink: "\f127"; +@fa-var-unlock: "\f09c"; +@fa-var-unlock-alt: "\f13e"; +@fa-var-unsorted: "\f0dc"; +@fa-var-upload: "\f093"; +@fa-var-usb: "\f287"; +@fa-var-usd: "\f155"; +@fa-var-user: "\f007"; +@fa-var-user-circle: "\f2bd"; +@fa-var-user-circle-o: "\f2be"; +@fa-var-user-md: "\f0f0"; +@fa-var-user-o: "\f2c0"; +@fa-var-user-plus: "\f234"; +@fa-var-user-secret: "\f21b"; +@fa-var-user-times: "\f235"; +@fa-var-users: "\f0c0"; +@fa-var-vcard: "\f2bb"; +@fa-var-vcard-o: "\f2bc"; +@fa-var-venus: "\f221"; +@fa-var-venus-double: "\f226"; +@fa-var-venus-mars: "\f228"; +@fa-var-viacoin: "\f237"; +@fa-var-viadeo: "\f2a9"; +@fa-var-viadeo-square: "\f2aa"; +@fa-var-video-camera: "\f03d"; +@fa-var-vimeo: "\f27d"; +@fa-var-vimeo-square: "\f194"; +@fa-var-vine: "\f1ca"; +@fa-var-vk: "\f189"; +@fa-var-volume-control-phone: "\f2a0"; +@fa-var-volume-down: "\f027"; +@fa-var-volume-off: "\f026"; +@fa-var-volume-up: "\f028"; +@fa-var-warning: "\f071"; +@fa-var-wechat: "\f1d7"; +@fa-var-weibo: "\f18a"; +@fa-var-weixin: "\f1d7"; +@fa-var-whatsapp: "\f232"; +@fa-var-wheelchair: "\f193"; +@fa-var-wheelchair-alt: "\f29b"; +@fa-var-wifi: "\f1eb"; +@fa-var-wikipedia-w: "\f266"; +@fa-var-window-close: "\f2d3"; +@fa-var-window-close-o: "\f2d4"; +@fa-var-window-maximize: "\f2d0"; +@fa-var-window-minimize: "\f2d1"; +@fa-var-window-restore: "\f2d2"; +@fa-var-windows: "\f17a"; +@fa-var-won: "\f159"; +@fa-var-wordpress: "\f19a"; +@fa-var-wpbeginner: "\f297"; +@fa-var-wpexplorer: "\f2de"; +@fa-var-wpforms: "\f298"; +@fa-var-wrench: "\f0ad"; +@fa-var-xing: "\f168"; +@fa-var-xing-square: "\f169"; +@fa-var-y-combinator: "\f23b"; +@fa-var-y-combinator-square: "\f1d4"; +@fa-var-yahoo: "\f19e"; +@fa-var-yc: "\f23b"; +@fa-var-yc-square: "\f1d4"; +@fa-var-yelp: "\f1e9"; +@fa-var-yen: "\f157"; +@fa-var-yoast: "\f2b1"; +@fa-var-youtube: "\f167"; +@fa-var-youtube-play: "\f16a"; +@fa-var-youtube-square: "\f166"; + diff --git a/js/font-awesome/scss/_animated.scss b/js/font-awesome/scss/_animated.scss new file mode 100644 index 000000000..8a020dbff --- /dev/null +++ b/js/font-awesome/scss/_animated.scss @@ -0,0 +1,34 @@ +// Spinning Icons +// -------------------------- + +.#{$fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.#{$fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/js/font-awesome/scss/_bordered-pulled.scss b/js/font-awesome/scss/_bordered-pulled.scss new file mode 100644 index 000000000..d4b85a02f --- /dev/null +++ b/js/font-awesome/scss/_bordered-pulled.scss @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.#{$fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em $fa-border-color; + border-radius: .1em; +} + +.#{$fa-css-prefix}-pull-left { float: left; } +.#{$fa-css-prefix}-pull-right { float: right; } + +.#{$fa-css-prefix} { + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.#{$fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/js/font-awesome/scss/_core.scss b/js/font-awesome/scss/_core.scss new file mode 100644 index 000000000..7425ef85f --- /dev/null +++ b/js/font-awesome/scss/_core.scss @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.#{$fa-css-prefix} { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/js/font-awesome/scss/_fixed-width.scss b/js/font-awesome/scss/_fixed-width.scss new file mode 100644 index 000000000..b221c9813 --- /dev/null +++ b/js/font-awesome/scss/_fixed-width.scss @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/js/font-awesome/scss/_icons.scss b/js/font-awesome/scss/_icons.scss new file mode 100644 index 000000000..e63e702c4 --- /dev/null +++ b/js/font-awesome/scss/_icons.scss @@ -0,0 +1,789 @@ +/* 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}-glass:before { content: $fa-var-glass; } +.#{$fa-css-prefix}-music:before { content: $fa-var-music; } +.#{$fa-css-prefix}-search:before { content: $fa-var-search; } +.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } +.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } +.#{$fa-css-prefix}-star:before { content: $fa-var-star; } +.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } +.#{$fa-css-prefix}-user:before { content: $fa-var-user; } +.#{$fa-css-prefix}-film:before { content: $fa-var-film; } +.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } +.#{$fa-css-prefix}-th:before { content: $fa-var-th; } +.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } +.#{$fa-css-prefix}-check:before { content: $fa-var-check; } +.#{$fa-css-prefix}-remove:before, +.#{$fa-css-prefix}-close:before, +.#{$fa-css-prefix}-times:before { content: $fa-var-times; } +.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } +.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } +.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } +.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } +.#{$fa-css-prefix}-gear:before, +.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } +.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } +.#{$fa-css-prefix}-home:before { content: $fa-var-home; } +.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } +.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } +.#{$fa-css-prefix}-road:before { content: $fa-var-road; } +.#{$fa-css-prefix}-download:before { content: $fa-var-download; } +.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } +.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } +.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } +.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } +.#{$fa-css-prefix}-rotate-right:before, +.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } +.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } +.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } +.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } +.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } +.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } +.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } +.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } +.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } +.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } +.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } +.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } +.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } +.#{$fa-css-prefix}-book:before { content: $fa-var-book; } +.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } +.#{$fa-css-prefix}-print:before { content: $fa-var-print; } +.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } +.#{$fa-css-prefix}-font:before { content: $fa-var-font; } +.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } +.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } +.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } +.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } +.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } +.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } +.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } +.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } +.#{$fa-css-prefix}-list:before { content: $fa-var-list; } +.#{$fa-css-prefix}-dedent:before, +.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } +.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } +.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } +.#{$fa-css-prefix}-photo:before, +.#{$fa-css-prefix}-image:before, +.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } +.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } +.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } +.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } +.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } +.#{$fa-css-prefix}-edit:before, +.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } +.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } +.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } +.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } +.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } +.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } +.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } +.#{$fa-css-prefix}-play:before { content: $fa-var-play; } +.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } +.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } +.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } +.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } +.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } +.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } +.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } +.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } +.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } +.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } +.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } +.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } +.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } +.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } +.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } +.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } +.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } +.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } +.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } +.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } +.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } +.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } +.#{$fa-css-prefix}-mail-forward:before, +.#{$fa-css-prefix}-share:before { content: $fa-var-share; } +.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } +.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } +.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } +.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } +.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } +.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } +.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } +.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } +.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } +.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } +.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } +.#{$fa-css-prefix}-warning:before, +.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } +.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } +.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } +.#{$fa-css-prefix}-random:before { content: $fa-var-random; } +.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } +.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } +.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } +.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } +.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } +.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } +.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } +.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } +.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } +.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } +.#{$fa-css-prefix}-bar-chart-o:before, +.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } +.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } +.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } +.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } +.#{$fa-css-prefix}-key:before { content: $fa-var-key; } +.#{$fa-css-prefix}-gears:before, +.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } +.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } +.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } +.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } +.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } +.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } +.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } +.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } +.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } +.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } +.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } +.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } +.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } +.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } +.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } +.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } +.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } +.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } +.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } +.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } +.#{$fa-css-prefix}-facebook-f:before, +.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } +.#{$fa-css-prefix}-github:before { content: $fa-var-github; } +.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } +.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-feed:before, +.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } +.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } +.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } +.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } +.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } +.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } +.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } +.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } +.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } +.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } +.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } +.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } +.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } +.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } +.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } +.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } +.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } +.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } +.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } +.#{$fa-css-prefix}-group:before, +.#{$fa-css-prefix}-users:before { content: $fa-var-users; } +.#{$fa-css-prefix}-chain:before, +.#{$fa-css-prefix}-link:before { content: $fa-var-link; } +.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } +.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } +.#{$fa-css-prefix}-cut:before, +.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } +.#{$fa-css-prefix}-copy:before, +.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } +.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } +.#{$fa-css-prefix}-save:before, +.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } +.#{$fa-css-prefix}-square:before { content: $fa-var-square; } +.#{$fa-css-prefix}-navicon:before, +.#{$fa-css-prefix}-reorder:before, +.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } +.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } +.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } +.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } +.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } +.#{$fa-css-prefix}-table:before { content: $fa-var-table; } +.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } +.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } +.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } +.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } +.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } +.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } +.#{$fa-css-prefix}-money:before { content: $fa-var-money; } +.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } +.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } +.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } +.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } +.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } +.#{$fa-css-prefix}-unsorted:before, +.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } +.#{$fa-css-prefix}-sort-down:before, +.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } +.#{$fa-css-prefix}-sort-up:before, +.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } +.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } +.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } +.#{$fa-css-prefix}-rotate-left:before, +.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } +.#{$fa-css-prefix}-legal:before, +.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } +.#{$fa-css-prefix}-dashboard:before, +.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } +.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } +.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } +.#{$fa-css-prefix}-flash:before, +.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } +.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } +.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } +.#{$fa-css-prefix}-paste:before, +.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } +.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } +.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } +.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } +.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } +.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } +.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } +.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } +.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } +.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } +.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } +.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } +.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } +.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } +.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } +.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } +.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } +.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } +.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } +.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } +.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } +.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } +.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } +.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } +.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } +.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } +.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } +.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } +.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } +.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } +.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } +.#{$fa-css-prefix}-mobile-phone:before, +.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } +.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } +.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } +.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } +.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } +.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } +.#{$fa-css-prefix}-mail-reply:before, +.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } +.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } +.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } +.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } +.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } +.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } +.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } +.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } +.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } +.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } +.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } +.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } +.#{$fa-css-prefix}-code:before { content: $fa-var-code; } +.#{$fa-css-prefix}-mail-reply-all:before, +.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } +.#{$fa-css-prefix}-star-half-empty:before, +.#{$fa-css-prefix}-star-half-full:before, +.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } +.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } +.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } +.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } +.#{$fa-css-prefix}-unlink:before, +.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } +.#{$fa-css-prefix}-question:before { content: $fa-var-question; } +.#{$fa-css-prefix}-info:before { content: $fa-var-info; } +.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } +.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } +.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } +.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } +.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } +.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } +.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } +.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } +.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } +.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } +.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } +.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } +.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } +.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } +.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } +.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } +.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } +.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } +.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } +.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } +.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } +.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } +.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } +.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } +.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } +.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } +.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } +.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } +.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } +.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } +.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } +.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } +.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } +.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } +.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } +.#{$fa-css-prefix}-toggle-down:before, +.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } +.#{$fa-css-prefix}-toggle-up:before, +.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } +.#{$fa-css-prefix}-toggle-right:before, +.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } +.#{$fa-css-prefix}-euro:before, +.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } +.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } +.#{$fa-css-prefix}-dollar:before, +.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } +.#{$fa-css-prefix}-rupee:before, +.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } +.#{$fa-css-prefix}-cny:before, +.#{$fa-css-prefix}-rmb:before, +.#{$fa-css-prefix}-yen:before, +.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } +.#{$fa-css-prefix}-ruble:before, +.#{$fa-css-prefix}-rouble:before, +.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } +.#{$fa-css-prefix}-won:before, +.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } +.#{$fa-css-prefix}-bitcoin:before, +.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } +.#{$fa-css-prefix}-file:before { content: $fa-var-file; } +.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } +.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } +.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } +.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } +.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } +.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } +.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } +.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } +.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } +.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } +.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } +.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } +.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } +.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } +.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } +.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } +.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } +.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } +.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } +.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } +.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } +.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } +.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } +.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } +.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } +.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } +.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } +.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } +.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } +.#{$fa-css-prefix}-android:before { content: $fa-var-android; } +.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } +.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } +.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } +.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } +.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } +.#{$fa-css-prefix}-female:before { content: $fa-var-female; } +.#{$fa-css-prefix}-male:before { content: $fa-var-male; } +.#{$fa-css-prefix}-gittip:before, +.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } +.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } +.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } +.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } +.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } +.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } +.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } +.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } +.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } +.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } +.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } +.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } +.#{$fa-css-prefix}-toggle-left:before, +.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } +.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } +.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } +.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } +.#{$fa-css-prefix}-turkish-lira:before, +.#{$fa-css-prefix}-try:before { content: $fa-var-try; } +.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } +.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } +.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } +.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } +.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } +.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } +.#{$fa-css-prefix}-institution:before, +.#{$fa-css-prefix}-bank:before, +.#{$fa-css-prefix}-university:before { content: $fa-var-university; } +.#{$fa-css-prefix}-mortar-board:before, +.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } +.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } +.#{$fa-css-prefix}-google:before { content: $fa-var-google; } +.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } +.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } +.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } +.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } +.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } +.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } +.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } +.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } +.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } +.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } +.#{$fa-css-prefix}-language:before { content: $fa-var-language; } +.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } +.#{$fa-css-prefix}-building:before { content: $fa-var-building; } +.#{$fa-css-prefix}-child:before { content: $fa-var-child; } +.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } +.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } +.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } +.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } +.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } +.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } +.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } +.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } +.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } +.#{$fa-css-prefix}-automobile:before, +.#{$fa-css-prefix}-car:before { content: $fa-var-car; } +.#{$fa-css-prefix}-cab:before, +.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } +.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } +.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } +.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } +.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } +.#{$fa-css-prefix}-database:before { content: $fa-var-database; } +.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } +.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } +.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } +.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } +.#{$fa-css-prefix}-file-photo-o:before, +.#{$fa-css-prefix}-file-picture-o:before, +.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } +.#{$fa-css-prefix}-file-zip-o:before, +.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } +.#{$fa-css-prefix}-file-sound-o:before, +.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } +.#{$fa-css-prefix}-file-movie-o:before, +.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } +.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } +.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } +.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } +.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } +.#{$fa-css-prefix}-life-bouy:before, +.#{$fa-css-prefix}-life-buoy:before, +.#{$fa-css-prefix}-life-saver:before, +.#{$fa-css-prefix}-support:before, +.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } +.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } +.#{$fa-css-prefix}-ra:before, +.#{$fa-css-prefix}-resistance:before, +.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } +.#{$fa-css-prefix}-ge:before, +.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } +.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } +.#{$fa-css-prefix}-git:before { content: $fa-var-git; } +.#{$fa-css-prefix}-y-combinator-square:before, +.#{$fa-css-prefix}-yc-square:before, +.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } +.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } +.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } +.#{$fa-css-prefix}-wechat:before, +.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } +.#{$fa-css-prefix}-send:before, +.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } +.#{$fa-css-prefix}-send-o:before, +.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } +.#{$fa-css-prefix}-history:before { content: $fa-var-history; } +.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } +.#{$fa-css-prefix}-header:before { content: $fa-var-header; } +.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } +.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } +.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } +.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } +.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } +.#{$fa-css-prefix}-soccer-ball-o:before, +.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } +.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } +.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } +.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } +.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } +.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } +.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } +.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } +.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } +.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } +.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } +.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } +.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } +.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } +.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } +.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } +.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } +.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } +.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } +.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } +.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } +.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } +.#{$fa-css-prefix}-at:before { content: $fa-var-at; } +.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } +.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } +.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } +.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } +.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } +.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } +.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } +.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } +.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } +.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } +.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } +.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } +.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } +.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } +.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } +.#{$fa-css-prefix}-shekel:before, +.#{$fa-css-prefix}-sheqel:before, +.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } +.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } +.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } +.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } +.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } +.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } +.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } +.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } +.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } +.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } +.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } +.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } +.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } +.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } +.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } +.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } +.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } +.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } +.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } +.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } +.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } +.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } +.#{$fa-css-prefix}-intersex:before, +.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } +.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } +.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } +.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } +.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } +.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } +.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } +.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } +.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } +.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } +.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } +.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } +.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } +.#{$fa-css-prefix}-server:before { content: $fa-var-server; } +.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } +.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } +.#{$fa-css-prefix}-hotel:before, +.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } +.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } +.#{$fa-css-prefix}-train:before { content: $fa-var-train; } +.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } +.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } +.#{$fa-css-prefix}-yc:before, +.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } +.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } +.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } +.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } +.#{$fa-css-prefix}-battery-4:before, +.#{$fa-css-prefix}-battery:before, +.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } +.#{$fa-css-prefix}-battery-3:before, +.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } +.#{$fa-css-prefix}-battery-2:before, +.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } +.#{$fa-css-prefix}-battery-1:before, +.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } +.#{$fa-css-prefix}-battery-0:before, +.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } +.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } +.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } +.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } +.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } +.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } +.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } +.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } +.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } +.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } +.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } +.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } +.#{$fa-css-prefix}-hourglass-1:before, +.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } +.#{$fa-css-prefix}-hourglass-2:before, +.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } +.#{$fa-css-prefix}-hourglass-3:before, +.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } +.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } +.#{$fa-css-prefix}-hand-grab-o:before, +.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } +.#{$fa-css-prefix}-hand-stop-o:before, +.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } +.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } +.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } +.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } +.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } +.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } +.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } +.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } +.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } +.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } +.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } +.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } +.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } +.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } +.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } +.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } +.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } +.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } +.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } +.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } +.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } +.#{$fa-css-prefix}-tv:before, +.#{$fa-css-prefix}-television:before { content: $fa-var-television; } +.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } +.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } +.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } +.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } +.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } +.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } +.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } +.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } +.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } +.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } +.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } +.#{$fa-css-prefix}-map:before { content: $fa-var-map; } +.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } +.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } +.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } +.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } +.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } +.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } +.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } +.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } +.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } +.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } +.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } +.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } +.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } +.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } +.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } +.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } +.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } +.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } +.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } +.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } +.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } +.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } +.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } +.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } +.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } +.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } +.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } +.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } +.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } +.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } +.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } +.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } +.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } +.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } +.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } +.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } +.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } +.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } +.#{$fa-css-prefix}-asl-interpreting:before, +.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } +.#{$fa-css-prefix}-deafness:before, +.#{$fa-css-prefix}-hard-of-hearing:before, +.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } +.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } +.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } +.#{$fa-css-prefix}-signing:before, +.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } +.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } +.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } +.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } +.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } +.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } +.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } +.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } +.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } +.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } +.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } +.#{$fa-css-prefix}-google-plus-circle:before, +.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } +.#{$fa-css-prefix}-fa:before, +.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } +.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; } +.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; } +.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; } +.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; } +.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; } +.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; } +.#{$fa-css-prefix}-vcard:before, +.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; } +.#{$fa-css-prefix}-vcard-o:before, +.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; } +.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; } +.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; } +.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; } +.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; } +.#{$fa-css-prefix}-drivers-license:before, +.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; } +.#{$fa-css-prefix}-drivers-license-o:before, +.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; } +.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; } +.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; } +.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; } +.#{$fa-css-prefix}-thermometer-4:before, +.#{$fa-css-prefix}-thermometer:before, +.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; } +.#{$fa-css-prefix}-thermometer-3:before, +.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; } +.#{$fa-css-prefix}-thermometer-2:before, +.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; } +.#{$fa-css-prefix}-thermometer-1:before, +.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; } +.#{$fa-css-prefix}-thermometer-0:before, +.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; } +.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; } +.#{$fa-css-prefix}-bathtub:before, +.#{$fa-css-prefix}-s15:before, +.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; } +.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; } +.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; } +.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; } +.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; } +.#{$fa-css-prefix}-times-rectangle:before, +.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; } +.#{$fa-css-prefix}-times-rectangle-o:before, +.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; } +.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; } +.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; } +.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; } +.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; } +.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; } +.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; } +.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; } +.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; } +.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; } +.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; } +.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; } diff --git a/js/font-awesome/scss/_larger.scss b/js/font-awesome/scss/_larger.scss new file mode 100644 index 000000000..41e9a8184 --- /dev/null +++ b/js/font-awesome/scss/_larger.scss @@ -0,0 +1,13 @@ +// 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: -15%; +} +.#{$fa-css-prefix}-2x { font-size: 2em; } +.#{$fa-css-prefix}-3x { font-size: 3em; } +.#{$fa-css-prefix}-4x { font-size: 4em; } +.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/js/font-awesome/scss/_list.scss b/js/font-awesome/scss/_list.scss new file mode 100644 index 000000000..7d1e4d54d --- /dev/null +++ b/js/font-awesome/scss/_list.scss @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.#{$fa-css-prefix}-ul { + padding-left: 0; + margin-left: $fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.#{$fa-css-prefix}-li { + position: absolute; + left: -$fa-li-width; + width: $fa-li-width; + top: (2em / 14); + text-align: center; + &.#{$fa-css-prefix}-lg { + left: -$fa-li-width + (4em / 14); + } +} diff --git a/js/font-awesome/scss/_mixins.scss b/js/font-awesome/scss/_mixins.scss new file mode 100644 index 000000000..c3bbd5745 --- /dev/null +++ b/js/font-awesome/scss/_mixins.scss @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +@mixin fa-icon() { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +@mixin fa-icon-rotate($degrees, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; + -webkit-transform: rotate($degrees); + -ms-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin fa-icon-flip($horiz, $vert, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; + -webkit-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + 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 { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// 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 { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/js/font-awesome/scss/_path.scss b/js/font-awesome/scss/_path.scss new file mode 100644 index 000000000..bb457c23a --- /dev/null +++ b/js/font-awesome/scss/_path.scss @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); + src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), + url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), + url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), + url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), + url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); +// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/js/font-awesome/scss/_rotated-flipped.scss b/js/font-awesome/scss/_rotated-flipped.scss new file mode 100644 index 000000000..a3558fd09 --- /dev/null +++ b/js/font-awesome/scss/_rotated-flipped.scss @@ -0,0 +1,20 @@ +// 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); } + +// Hook for IE8-9 +// ------------------------- + +:root .#{$fa-css-prefix}-rotate-90, +:root .#{$fa-css-prefix}-rotate-180, +:root .#{$fa-css-prefix}-rotate-270, +:root .#{$fa-css-prefix}-flip-horizontal, +:root .#{$fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/js/font-awesome/scss/_screen-reader.scss b/js/font-awesome/scss/_screen-reader.scss new file mode 100644 index 000000000..637426f0d --- /dev/null +++ b/js/font-awesome/scss/_screen-reader.scss @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { @include sr-only(); } +.sr-only-focusable { @include sr-only-focusable(); } diff --git a/js/font-awesome/scss/_stacked.scss b/js/font-awesome/scss/_stacked.scss new file mode 100644 index 000000000..aef740366 --- /dev/null +++ b/js/font-awesome/scss/_stacked.scss @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.#{$fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.#{$fa-css-prefix}-stack-1x { line-height: inherit; } +.#{$fa-css-prefix}-stack-2x { font-size: 2em; } +.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/js/font-awesome/scss/_variables.scss b/js/font-awesome/scss/_variables.scss new file mode 100644 index 000000000..498fc4a08 --- /dev/null +++ b/js/font-awesome/scss/_variables.scss @@ -0,0 +1,800 @@ +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +$fa-font-size-base: 14px !default; +$fa-line-height-base: 1 !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: fa !default; +$fa-version: "4.7.0" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +$fa-var-500px: "\f26e"; +$fa-var-address-book: "\f2b9"; +$fa-var-address-book-o: "\f2ba"; +$fa-var-address-card: "\f2bb"; +$fa-var-address-card-o: "\f2bc"; +$fa-var-adjust: "\f042"; +$fa-var-adn: "\f170"; +$fa-var-align-center: "\f037"; +$fa-var-align-justify: "\f039"; +$fa-var-align-left: "\f036"; +$fa-var-align-right: "\f038"; +$fa-var-amazon: "\f270"; +$fa-var-ambulance: "\f0f9"; +$fa-var-american-sign-language-interpreting: "\f2a3"; +$fa-var-anchor: "\f13d"; +$fa-var-android: "\f17b"; +$fa-var-angellist: "\f209"; +$fa-var-angle-double-down: "\f103"; +$fa-var-angle-double-left: "\f100"; +$fa-var-angle-double-right: "\f101"; +$fa-var-angle-double-up: "\f102"; +$fa-var-angle-down: "\f107"; +$fa-var-angle-left: "\f104"; +$fa-var-angle-right: "\f105"; +$fa-var-angle-up: "\f106"; +$fa-var-apple: "\f179"; +$fa-var-archive: "\f187"; +$fa-var-area-chart: "\f1fe"; +$fa-var-arrow-circle-down: "\f0ab"; +$fa-var-arrow-circle-left: "\f0a8"; +$fa-var-arrow-circle-o-down: "\f01a"; +$fa-var-arrow-circle-o-left: "\f190"; +$fa-var-arrow-circle-o-right: "\f18e"; +$fa-var-arrow-circle-o-up: "\f01b"; +$fa-var-arrow-circle-right: "\f0a9"; +$fa-var-arrow-circle-up: "\f0aa"; +$fa-var-arrow-down: "\f063"; +$fa-var-arrow-left: "\f060"; +$fa-var-arrow-right: "\f061"; +$fa-var-arrow-up: "\f062"; +$fa-var-arrows: "\f047"; +$fa-var-arrows-alt: "\f0b2"; +$fa-var-arrows-h: "\f07e"; +$fa-var-arrows-v: "\f07d"; +$fa-var-asl-interpreting: "\f2a3"; +$fa-var-assistive-listening-systems: "\f2a2"; +$fa-var-asterisk: "\f069"; +$fa-var-at: "\f1fa"; +$fa-var-audio-description: "\f29e"; +$fa-var-automobile: "\f1b9"; +$fa-var-backward: "\f04a"; +$fa-var-balance-scale: "\f24e"; +$fa-var-ban: "\f05e"; +$fa-var-bandcamp: "\f2d5"; +$fa-var-bank: "\f19c"; +$fa-var-bar-chart: "\f080"; +$fa-var-bar-chart-o: "\f080"; +$fa-var-barcode: "\f02a"; +$fa-var-bars: "\f0c9"; +$fa-var-bath: "\f2cd"; +$fa-var-bathtub: "\f2cd"; +$fa-var-battery: "\f240"; +$fa-var-battery-0: "\f244"; +$fa-var-battery-1: "\f243"; +$fa-var-battery-2: "\f242"; +$fa-var-battery-3: "\f241"; +$fa-var-battery-4: "\f240"; +$fa-var-battery-empty: "\f244"; +$fa-var-battery-full: "\f240"; +$fa-var-battery-half: "\f242"; +$fa-var-battery-quarter: "\f243"; +$fa-var-battery-three-quarters: "\f241"; +$fa-var-bed: "\f236"; +$fa-var-beer: "\f0fc"; +$fa-var-behance: "\f1b4"; +$fa-var-behance-square: "\f1b5"; +$fa-var-bell: "\f0f3"; +$fa-var-bell-o: "\f0a2"; +$fa-var-bell-slash: "\f1f6"; +$fa-var-bell-slash-o: "\f1f7"; +$fa-var-bicycle: "\f206"; +$fa-var-binoculars: "\f1e5"; +$fa-var-birthday-cake: "\f1fd"; +$fa-var-bitbucket: "\f171"; +$fa-var-bitbucket-square: "\f172"; +$fa-var-bitcoin: "\f15a"; +$fa-var-black-tie: "\f27e"; +$fa-var-blind: "\f29d"; +$fa-var-bluetooth: "\f293"; +$fa-var-bluetooth-b: "\f294"; +$fa-var-bold: "\f032"; +$fa-var-bolt: "\f0e7"; +$fa-var-bomb: "\f1e2"; +$fa-var-book: "\f02d"; +$fa-var-bookmark: "\f02e"; +$fa-var-bookmark-o: "\f097"; +$fa-var-braille: "\f2a1"; +$fa-var-briefcase: "\f0b1"; +$fa-var-btc: "\f15a"; +$fa-var-bug: "\f188"; +$fa-var-building: "\f1ad"; +$fa-var-building-o: "\f0f7"; +$fa-var-bullhorn: "\f0a1"; +$fa-var-bullseye: "\f140"; +$fa-var-bus: "\f207"; +$fa-var-buysellads: "\f20d"; +$fa-var-cab: "\f1ba"; +$fa-var-calculator: "\f1ec"; +$fa-var-calendar: "\f073"; +$fa-var-calendar-check-o: "\f274"; +$fa-var-calendar-minus-o: "\f272"; +$fa-var-calendar-o: "\f133"; +$fa-var-calendar-plus-o: "\f271"; +$fa-var-calendar-times-o: "\f273"; +$fa-var-camera: "\f030"; +$fa-var-camera-retro: "\f083"; +$fa-var-car: "\f1b9"; +$fa-var-caret-down: "\f0d7"; +$fa-var-caret-left: "\f0d9"; +$fa-var-caret-right: "\f0da"; +$fa-var-caret-square-o-down: "\f150"; +$fa-var-caret-square-o-left: "\f191"; +$fa-var-caret-square-o-right: "\f152"; +$fa-var-caret-square-o-up: "\f151"; +$fa-var-caret-up: "\f0d8"; +$fa-var-cart-arrow-down: "\f218"; +$fa-var-cart-plus: "\f217"; +$fa-var-cc: "\f20a"; +$fa-var-cc-amex: "\f1f3"; +$fa-var-cc-diners-club: "\f24c"; +$fa-var-cc-discover: "\f1f2"; +$fa-var-cc-jcb: "\f24b"; +$fa-var-cc-mastercard: "\f1f1"; +$fa-var-cc-paypal: "\f1f4"; +$fa-var-cc-stripe: "\f1f5"; +$fa-var-cc-visa: "\f1f0"; +$fa-var-certificate: "\f0a3"; +$fa-var-chain: "\f0c1"; +$fa-var-chain-broken: "\f127"; +$fa-var-check: "\f00c"; +$fa-var-check-circle: "\f058"; +$fa-var-check-circle-o: "\f05d"; +$fa-var-check-square: "\f14a"; +$fa-var-check-square-o: "\f046"; +$fa-var-chevron-circle-down: "\f13a"; +$fa-var-chevron-circle-left: "\f137"; +$fa-var-chevron-circle-right: "\f138"; +$fa-var-chevron-circle-up: "\f139"; +$fa-var-chevron-down: "\f078"; +$fa-var-chevron-left: "\f053"; +$fa-var-chevron-right: "\f054"; +$fa-var-chevron-up: "\f077"; +$fa-var-child: "\f1ae"; +$fa-var-chrome: "\f268"; +$fa-var-circle: "\f111"; +$fa-var-circle-o: "\f10c"; +$fa-var-circle-o-notch: "\f1ce"; +$fa-var-circle-thin: "\f1db"; +$fa-var-clipboard: "\f0ea"; +$fa-var-clock-o: "\f017"; +$fa-var-clone: "\f24d"; +$fa-var-close: "\f00d"; +$fa-var-cloud: "\f0c2"; +$fa-var-cloud-download: "\f0ed"; +$fa-var-cloud-upload: "\f0ee"; +$fa-var-cny: "\f157"; +$fa-var-code: "\f121"; +$fa-var-code-fork: "\f126"; +$fa-var-codepen: "\f1cb"; +$fa-var-codiepie: "\f284"; +$fa-var-coffee: "\f0f4"; +$fa-var-cog: "\f013"; +$fa-var-cogs: "\f085"; +$fa-var-columns: "\f0db"; +$fa-var-comment: "\f075"; +$fa-var-comment-o: "\f0e5"; +$fa-var-commenting: "\f27a"; +$fa-var-commenting-o: "\f27b"; +$fa-var-comments: "\f086"; +$fa-var-comments-o: "\f0e6"; +$fa-var-compass: "\f14e"; +$fa-var-compress: "\f066"; +$fa-var-connectdevelop: "\f20e"; +$fa-var-contao: "\f26d"; +$fa-var-copy: "\f0c5"; +$fa-var-copyright: "\f1f9"; +$fa-var-creative-commons: "\f25e"; +$fa-var-credit-card: "\f09d"; +$fa-var-credit-card-alt: "\f283"; +$fa-var-crop: "\f125"; +$fa-var-crosshairs: "\f05b"; +$fa-var-css3: "\f13c"; +$fa-var-cube: "\f1b2"; +$fa-var-cubes: "\f1b3"; +$fa-var-cut: "\f0c4"; +$fa-var-cutlery: "\f0f5"; +$fa-var-dashboard: "\f0e4"; +$fa-var-dashcube: "\f210"; +$fa-var-database: "\f1c0"; +$fa-var-deaf: "\f2a4"; +$fa-var-deafness: "\f2a4"; +$fa-var-dedent: "\f03b"; +$fa-var-delicious: "\f1a5"; +$fa-var-desktop: "\f108"; +$fa-var-deviantart: "\f1bd"; +$fa-var-diamond: "\f219"; +$fa-var-digg: "\f1a6"; +$fa-var-dollar: "\f155"; +$fa-var-dot-circle-o: "\f192"; +$fa-var-download: "\f019"; +$fa-var-dribbble: "\f17d"; +$fa-var-drivers-license: "\f2c2"; +$fa-var-drivers-license-o: "\f2c3"; +$fa-var-dropbox: "\f16b"; +$fa-var-drupal: "\f1a9"; +$fa-var-edge: "\f282"; +$fa-var-edit: "\f044"; +$fa-var-eercast: "\f2da"; +$fa-var-eject: "\f052"; +$fa-var-ellipsis-h: "\f141"; +$fa-var-ellipsis-v: "\f142"; +$fa-var-empire: "\f1d1"; +$fa-var-envelope: "\f0e0"; +$fa-var-envelope-o: "\f003"; +$fa-var-envelope-open: "\f2b6"; +$fa-var-envelope-open-o: "\f2b7"; +$fa-var-envelope-square: "\f199"; +$fa-var-envira: "\f299"; +$fa-var-eraser: "\f12d"; +$fa-var-etsy: "\f2d7"; +$fa-var-eur: "\f153"; +$fa-var-euro: "\f153"; +$fa-var-exchange: "\f0ec"; +$fa-var-exclamation: "\f12a"; +$fa-var-exclamation-circle: "\f06a"; +$fa-var-exclamation-triangle: "\f071"; +$fa-var-expand: "\f065"; +$fa-var-expeditedssl: "\f23e"; +$fa-var-external-link: "\f08e"; +$fa-var-external-link-square: "\f14c"; +$fa-var-eye: "\f06e"; +$fa-var-eye-slash: "\f070"; +$fa-var-eyedropper: "\f1fb"; +$fa-var-fa: "\f2b4"; +$fa-var-facebook: "\f09a"; +$fa-var-facebook-f: "\f09a"; +$fa-var-facebook-official: "\f230"; +$fa-var-facebook-square: "\f082"; +$fa-var-fast-backward: "\f049"; +$fa-var-fast-forward: "\f050"; +$fa-var-fax: "\f1ac"; +$fa-var-feed: "\f09e"; +$fa-var-female: "\f182"; +$fa-var-fighter-jet: "\f0fb"; +$fa-var-file: "\f15b"; +$fa-var-file-archive-o: "\f1c6"; +$fa-var-file-audio-o: "\f1c7"; +$fa-var-file-code-o: "\f1c9"; +$fa-var-file-excel-o: "\f1c3"; +$fa-var-file-image-o: "\f1c5"; +$fa-var-file-movie-o: "\f1c8"; +$fa-var-file-o: "\f016"; +$fa-var-file-pdf-o: "\f1c1"; +$fa-var-file-photo-o: "\f1c5"; +$fa-var-file-picture-o: "\f1c5"; +$fa-var-file-powerpoint-o: "\f1c4"; +$fa-var-file-sound-o: "\f1c7"; +$fa-var-file-text: "\f15c"; +$fa-var-file-text-o: "\f0f6"; +$fa-var-file-video-o: "\f1c8"; +$fa-var-file-word-o: "\f1c2"; +$fa-var-file-zip-o: "\f1c6"; +$fa-var-files-o: "\f0c5"; +$fa-var-film: "\f008"; +$fa-var-filter: "\f0b0"; +$fa-var-fire: "\f06d"; +$fa-var-fire-extinguisher: "\f134"; +$fa-var-firefox: "\f269"; +$fa-var-first-order: "\f2b0"; +$fa-var-flag: "\f024"; +$fa-var-flag-checkered: "\f11e"; +$fa-var-flag-o: "\f11d"; +$fa-var-flash: "\f0e7"; +$fa-var-flask: "\f0c3"; +$fa-var-flickr: "\f16e"; +$fa-var-floppy-o: "\f0c7"; +$fa-var-folder: "\f07b"; +$fa-var-folder-o: "\f114"; +$fa-var-folder-open: "\f07c"; +$fa-var-folder-open-o: "\f115"; +$fa-var-font: "\f031"; +$fa-var-font-awesome: "\f2b4"; +$fa-var-fonticons: "\f280"; +$fa-var-fort-awesome: "\f286"; +$fa-var-forumbee: "\f211"; +$fa-var-forward: "\f04e"; +$fa-var-foursquare: "\f180"; +$fa-var-free-code-camp: "\f2c5"; +$fa-var-frown-o: "\f119"; +$fa-var-futbol-o: "\f1e3"; +$fa-var-gamepad: "\f11b"; +$fa-var-gavel: "\f0e3"; +$fa-var-gbp: "\f154"; +$fa-var-ge: "\f1d1"; +$fa-var-gear: "\f013"; +$fa-var-gears: "\f085"; +$fa-var-genderless: "\f22d"; +$fa-var-get-pocket: "\f265"; +$fa-var-gg: "\f260"; +$fa-var-gg-circle: "\f261"; +$fa-var-gift: "\f06b"; +$fa-var-git: "\f1d3"; +$fa-var-git-square: "\f1d2"; +$fa-var-github: "\f09b"; +$fa-var-github-alt: "\f113"; +$fa-var-github-square: "\f092"; +$fa-var-gitlab: "\f296"; +$fa-var-gittip: "\f184"; +$fa-var-glass: "\f000"; +$fa-var-glide: "\f2a5"; +$fa-var-glide-g: "\f2a6"; +$fa-var-globe: "\f0ac"; +$fa-var-google: "\f1a0"; +$fa-var-google-plus: "\f0d5"; +$fa-var-google-plus-circle: "\f2b3"; +$fa-var-google-plus-official: "\f2b3"; +$fa-var-google-plus-square: "\f0d4"; +$fa-var-google-wallet: "\f1ee"; +$fa-var-graduation-cap: "\f19d"; +$fa-var-gratipay: "\f184"; +$fa-var-grav: "\f2d6"; +$fa-var-group: "\f0c0"; +$fa-var-h-square: "\f0fd"; +$fa-var-hacker-news: "\f1d4"; +$fa-var-hand-grab-o: "\f255"; +$fa-var-hand-lizard-o: "\f258"; +$fa-var-hand-o-down: "\f0a7"; +$fa-var-hand-o-left: "\f0a5"; +$fa-var-hand-o-right: "\f0a4"; +$fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-paper-o: "\f256"; +$fa-var-hand-peace-o: "\f25b"; +$fa-var-hand-pointer-o: "\f25a"; +$fa-var-hand-rock-o: "\f255"; +$fa-var-hand-scissors-o: "\f257"; +$fa-var-hand-spock-o: "\f259"; +$fa-var-hand-stop-o: "\f256"; +$fa-var-handshake-o: "\f2b5"; +$fa-var-hard-of-hearing: "\f2a4"; +$fa-var-hashtag: "\f292"; +$fa-var-hdd-o: "\f0a0"; +$fa-var-header: "\f1dc"; +$fa-var-headphones: "\f025"; +$fa-var-heart: "\f004"; +$fa-var-heart-o: "\f08a"; +$fa-var-heartbeat: "\f21e"; +$fa-var-history: "\f1da"; +$fa-var-home: "\f015"; +$fa-var-hospital-o: "\f0f8"; +$fa-var-hotel: "\f236"; +$fa-var-hourglass: "\f254"; +$fa-var-hourglass-1: "\f251"; +$fa-var-hourglass-2: "\f252"; +$fa-var-hourglass-3: "\f253"; +$fa-var-hourglass-end: "\f253"; +$fa-var-hourglass-half: "\f252"; +$fa-var-hourglass-o: "\f250"; +$fa-var-hourglass-start: "\f251"; +$fa-var-houzz: "\f27c"; +$fa-var-html5: "\f13b"; +$fa-var-i-cursor: "\f246"; +$fa-var-id-badge: "\f2c1"; +$fa-var-id-card: "\f2c2"; +$fa-var-id-card-o: "\f2c3"; +$fa-var-ils: "\f20b"; +$fa-var-image: "\f03e"; +$fa-var-imdb: "\f2d8"; +$fa-var-inbox: "\f01c"; +$fa-var-indent: "\f03c"; +$fa-var-industry: "\f275"; +$fa-var-info: "\f129"; +$fa-var-info-circle: "\f05a"; +$fa-var-inr: "\f156"; +$fa-var-instagram: "\f16d"; +$fa-var-institution: "\f19c"; +$fa-var-internet-explorer: "\f26b"; +$fa-var-intersex: "\f224"; +$fa-var-ioxhost: "\f208"; +$fa-var-italic: "\f033"; +$fa-var-joomla: "\f1aa"; +$fa-var-jpy: "\f157"; +$fa-var-jsfiddle: "\f1cc"; +$fa-var-key: "\f084"; +$fa-var-keyboard-o: "\f11c"; +$fa-var-krw: "\f159"; +$fa-var-language: "\f1ab"; +$fa-var-laptop: "\f109"; +$fa-var-lastfm: "\f202"; +$fa-var-lastfm-square: "\f203"; +$fa-var-leaf: "\f06c"; +$fa-var-leanpub: "\f212"; +$fa-var-legal: "\f0e3"; +$fa-var-lemon-o: "\f094"; +$fa-var-level-down: "\f149"; +$fa-var-level-up: "\f148"; +$fa-var-life-bouy: "\f1cd"; +$fa-var-life-buoy: "\f1cd"; +$fa-var-life-ring: "\f1cd"; +$fa-var-life-saver: "\f1cd"; +$fa-var-lightbulb-o: "\f0eb"; +$fa-var-line-chart: "\f201"; +$fa-var-link: "\f0c1"; +$fa-var-linkedin: "\f0e1"; +$fa-var-linkedin-square: "\f08c"; +$fa-var-linode: "\f2b8"; +$fa-var-linux: "\f17c"; +$fa-var-list: "\f03a"; +$fa-var-list-alt: "\f022"; +$fa-var-list-ol: "\f0cb"; +$fa-var-list-ul: "\f0ca"; +$fa-var-location-arrow: "\f124"; +$fa-var-lock: "\f023"; +$fa-var-long-arrow-down: "\f175"; +$fa-var-long-arrow-left: "\f177"; +$fa-var-long-arrow-right: "\f178"; +$fa-var-long-arrow-up: "\f176"; +$fa-var-low-vision: "\f2a8"; +$fa-var-magic: "\f0d0"; +$fa-var-magnet: "\f076"; +$fa-var-mail-forward: "\f064"; +$fa-var-mail-reply: "\f112"; +$fa-var-mail-reply-all: "\f122"; +$fa-var-male: "\f183"; +$fa-var-map: "\f279"; +$fa-var-map-marker: "\f041"; +$fa-var-map-o: "\f278"; +$fa-var-map-pin: "\f276"; +$fa-var-map-signs: "\f277"; +$fa-var-mars: "\f222"; +$fa-var-mars-double: "\f227"; +$fa-var-mars-stroke: "\f229"; +$fa-var-mars-stroke-h: "\f22b"; +$fa-var-mars-stroke-v: "\f22a"; +$fa-var-maxcdn: "\f136"; +$fa-var-meanpath: "\f20c"; +$fa-var-medium: "\f23a"; +$fa-var-medkit: "\f0fa"; +$fa-var-meetup: "\f2e0"; +$fa-var-meh-o: "\f11a"; +$fa-var-mercury: "\f223"; +$fa-var-microchip: "\f2db"; +$fa-var-microphone: "\f130"; +$fa-var-microphone-slash: "\f131"; +$fa-var-minus: "\f068"; +$fa-var-minus-circle: "\f056"; +$fa-var-minus-square: "\f146"; +$fa-var-minus-square-o: "\f147"; +$fa-var-mixcloud: "\f289"; +$fa-var-mobile: "\f10b"; +$fa-var-mobile-phone: "\f10b"; +$fa-var-modx: "\f285"; +$fa-var-money: "\f0d6"; +$fa-var-moon-o: "\f186"; +$fa-var-mortar-board: "\f19d"; +$fa-var-motorcycle: "\f21c"; +$fa-var-mouse-pointer: "\f245"; +$fa-var-music: "\f001"; +$fa-var-navicon: "\f0c9"; +$fa-var-neuter: "\f22c"; +$fa-var-newspaper-o: "\f1ea"; +$fa-var-object-group: "\f247"; +$fa-var-object-ungroup: "\f248"; +$fa-var-odnoklassniki: "\f263"; +$fa-var-odnoklassniki-square: "\f264"; +$fa-var-opencart: "\f23d"; +$fa-var-openid: "\f19b"; +$fa-var-opera: "\f26a"; +$fa-var-optin-monster: "\f23c"; +$fa-var-outdent: "\f03b"; +$fa-var-pagelines: "\f18c"; +$fa-var-paint-brush: "\f1fc"; +$fa-var-paper-plane: "\f1d8"; +$fa-var-paper-plane-o: "\f1d9"; +$fa-var-paperclip: "\f0c6"; +$fa-var-paragraph: "\f1dd"; +$fa-var-paste: "\f0ea"; +$fa-var-pause: "\f04c"; +$fa-var-pause-circle: "\f28b"; +$fa-var-pause-circle-o: "\f28c"; +$fa-var-paw: "\f1b0"; +$fa-var-paypal: "\f1ed"; +$fa-var-pencil: "\f040"; +$fa-var-pencil-square: "\f14b"; +$fa-var-pencil-square-o: "\f044"; +$fa-var-percent: "\f295"; +$fa-var-phone: "\f095"; +$fa-var-phone-square: "\f098"; +$fa-var-photo: "\f03e"; +$fa-var-picture-o: "\f03e"; +$fa-var-pie-chart: "\f200"; +$fa-var-pied-piper: "\f2ae"; +$fa-var-pied-piper-alt: "\f1a8"; +$fa-var-pied-piper-pp: "\f1a7"; +$fa-var-pinterest: "\f0d2"; +$fa-var-pinterest-p: "\f231"; +$fa-var-pinterest-square: "\f0d3"; +$fa-var-plane: "\f072"; +$fa-var-play: "\f04b"; +$fa-var-play-circle: "\f144"; +$fa-var-play-circle-o: "\f01d"; +$fa-var-plug: "\f1e6"; +$fa-var-plus: "\f067"; +$fa-var-plus-circle: "\f055"; +$fa-var-plus-square: "\f0fe"; +$fa-var-plus-square-o: "\f196"; +$fa-var-podcast: "\f2ce"; +$fa-var-power-off: "\f011"; +$fa-var-print: "\f02f"; +$fa-var-product-hunt: "\f288"; +$fa-var-puzzle-piece: "\f12e"; +$fa-var-qq: "\f1d6"; +$fa-var-qrcode: "\f029"; +$fa-var-question: "\f128"; +$fa-var-question-circle: "\f059"; +$fa-var-question-circle-o: "\f29c"; +$fa-var-quora: "\f2c4"; +$fa-var-quote-left: "\f10d"; +$fa-var-quote-right: "\f10e"; +$fa-var-ra: "\f1d0"; +$fa-var-random: "\f074"; +$fa-var-ravelry: "\f2d9"; +$fa-var-rebel: "\f1d0"; +$fa-var-recycle: "\f1b8"; +$fa-var-reddit: "\f1a1"; +$fa-var-reddit-alien: "\f281"; +$fa-var-reddit-square: "\f1a2"; +$fa-var-refresh: "\f021"; +$fa-var-registered: "\f25d"; +$fa-var-remove: "\f00d"; +$fa-var-renren: "\f18b"; +$fa-var-reorder: "\f0c9"; +$fa-var-repeat: "\f01e"; +$fa-var-reply: "\f112"; +$fa-var-reply-all: "\f122"; +$fa-var-resistance: "\f1d0"; +$fa-var-retweet: "\f079"; +$fa-var-rmb: "\f157"; +$fa-var-road: "\f018"; +$fa-var-rocket: "\f135"; +$fa-var-rotate-left: "\f0e2"; +$fa-var-rotate-right: "\f01e"; +$fa-var-rouble: "\f158"; +$fa-var-rss: "\f09e"; +$fa-var-rss-square: "\f143"; +$fa-var-rub: "\f158"; +$fa-var-ruble: "\f158"; +$fa-var-rupee: "\f156"; +$fa-var-s15: "\f2cd"; +$fa-var-safari: "\f267"; +$fa-var-save: "\f0c7"; +$fa-var-scissors: "\f0c4"; +$fa-var-scribd: "\f28a"; +$fa-var-search: "\f002"; +$fa-var-search-minus: "\f010"; +$fa-var-search-plus: "\f00e"; +$fa-var-sellsy: "\f213"; +$fa-var-send: "\f1d8"; +$fa-var-send-o: "\f1d9"; +$fa-var-server: "\f233"; +$fa-var-share: "\f064"; +$fa-var-share-alt: "\f1e0"; +$fa-var-share-alt-square: "\f1e1"; +$fa-var-share-square: "\f14d"; +$fa-var-share-square-o: "\f045"; +$fa-var-shekel: "\f20b"; +$fa-var-sheqel: "\f20b"; +$fa-var-shield: "\f132"; +$fa-var-ship: "\f21a"; +$fa-var-shirtsinbulk: "\f214"; +$fa-var-shopping-bag: "\f290"; +$fa-var-shopping-basket: "\f291"; +$fa-var-shopping-cart: "\f07a"; +$fa-var-shower: "\f2cc"; +$fa-var-sign-in: "\f090"; +$fa-var-sign-language: "\f2a7"; +$fa-var-sign-out: "\f08b"; +$fa-var-signal: "\f012"; +$fa-var-signing: "\f2a7"; +$fa-var-simplybuilt: "\f215"; +$fa-var-sitemap: "\f0e8"; +$fa-var-skyatlas: "\f216"; +$fa-var-skype: "\f17e"; +$fa-var-slack: "\f198"; +$fa-var-sliders: "\f1de"; +$fa-var-slideshare: "\f1e7"; +$fa-var-smile-o: "\f118"; +$fa-var-snapchat: "\f2ab"; +$fa-var-snapchat-ghost: "\f2ac"; +$fa-var-snapchat-square: "\f2ad"; +$fa-var-snowflake-o: "\f2dc"; +$fa-var-soccer-ball-o: "\f1e3"; +$fa-var-sort: "\f0dc"; +$fa-var-sort-alpha-asc: "\f15d"; +$fa-var-sort-alpha-desc: "\f15e"; +$fa-var-sort-amount-asc: "\f160"; +$fa-var-sort-amount-desc: "\f161"; +$fa-var-sort-asc: "\f0de"; +$fa-var-sort-desc: "\f0dd"; +$fa-var-sort-down: "\f0dd"; +$fa-var-sort-numeric-asc: "\f162"; +$fa-var-sort-numeric-desc: "\f163"; +$fa-var-sort-up: "\f0de"; +$fa-var-soundcloud: "\f1be"; +$fa-var-space-shuttle: "\f197"; +$fa-var-spinner: "\f110"; +$fa-var-spoon: "\f1b1"; +$fa-var-spotify: "\f1bc"; +$fa-var-square: "\f0c8"; +$fa-var-square-o: "\f096"; +$fa-var-stack-exchange: "\f18d"; +$fa-var-stack-overflow: "\f16c"; +$fa-var-star: "\f005"; +$fa-var-star-half: "\f089"; +$fa-var-star-half-empty: "\f123"; +$fa-var-star-half-full: "\f123"; +$fa-var-star-half-o: "\f123"; +$fa-var-star-o: "\f006"; +$fa-var-steam: "\f1b6"; +$fa-var-steam-square: "\f1b7"; +$fa-var-step-backward: "\f048"; +$fa-var-step-forward: "\f051"; +$fa-var-stethoscope: "\f0f1"; +$fa-var-sticky-note: "\f249"; +$fa-var-sticky-note-o: "\f24a"; +$fa-var-stop: "\f04d"; +$fa-var-stop-circle: "\f28d"; +$fa-var-stop-circle-o: "\f28e"; +$fa-var-street-view: "\f21d"; +$fa-var-strikethrough: "\f0cc"; +$fa-var-stumbleupon: "\f1a4"; +$fa-var-stumbleupon-circle: "\f1a3"; +$fa-var-subscript: "\f12c"; +$fa-var-subway: "\f239"; +$fa-var-suitcase: "\f0f2"; +$fa-var-sun-o: "\f185"; +$fa-var-superpowers: "\f2dd"; +$fa-var-superscript: "\f12b"; +$fa-var-support: "\f1cd"; +$fa-var-table: "\f0ce"; +$fa-var-tablet: "\f10a"; +$fa-var-tachometer: "\f0e4"; +$fa-var-tag: "\f02b"; +$fa-var-tags: "\f02c"; +$fa-var-tasks: "\f0ae"; +$fa-var-taxi: "\f1ba"; +$fa-var-telegram: "\f2c6"; +$fa-var-television: "\f26c"; +$fa-var-tencent-weibo: "\f1d5"; +$fa-var-terminal: "\f120"; +$fa-var-text-height: "\f034"; +$fa-var-text-width: "\f035"; +$fa-var-th: "\f00a"; +$fa-var-th-large: "\f009"; +$fa-var-th-list: "\f00b"; +$fa-var-themeisle: "\f2b2"; +$fa-var-thermometer: "\f2c7"; +$fa-var-thermometer-0: "\f2cb"; +$fa-var-thermometer-1: "\f2ca"; +$fa-var-thermometer-2: "\f2c9"; +$fa-var-thermometer-3: "\f2c8"; +$fa-var-thermometer-4: "\f2c7"; +$fa-var-thermometer-empty: "\f2cb"; +$fa-var-thermometer-full: "\f2c7"; +$fa-var-thermometer-half: "\f2c9"; +$fa-var-thermometer-quarter: "\f2ca"; +$fa-var-thermometer-three-quarters: "\f2c8"; +$fa-var-thumb-tack: "\f08d"; +$fa-var-thumbs-down: "\f165"; +$fa-var-thumbs-o-down: "\f088"; +$fa-var-thumbs-o-up: "\f087"; +$fa-var-thumbs-up: "\f164"; +$fa-var-ticket: "\f145"; +$fa-var-times: "\f00d"; +$fa-var-times-circle: "\f057"; +$fa-var-times-circle-o: "\f05c"; +$fa-var-times-rectangle: "\f2d3"; +$fa-var-times-rectangle-o: "\f2d4"; +$fa-var-tint: "\f043"; +$fa-var-toggle-down: "\f150"; +$fa-var-toggle-left: "\f191"; +$fa-var-toggle-off: "\f204"; +$fa-var-toggle-on: "\f205"; +$fa-var-toggle-right: "\f152"; +$fa-var-toggle-up: "\f151"; +$fa-var-trademark: "\f25c"; +$fa-var-train: "\f238"; +$fa-var-transgender: "\f224"; +$fa-var-transgender-alt: "\f225"; +$fa-var-trash: "\f1f8"; +$fa-var-trash-o: "\f014"; +$fa-var-tree: "\f1bb"; +$fa-var-trello: "\f181"; +$fa-var-tripadvisor: "\f262"; +$fa-var-trophy: "\f091"; +$fa-var-truck: "\f0d1"; +$fa-var-try: "\f195"; +$fa-var-tty: "\f1e4"; +$fa-var-tumblr: "\f173"; +$fa-var-tumblr-square: "\f174"; +$fa-var-turkish-lira: "\f195"; +$fa-var-tv: "\f26c"; +$fa-var-twitch: "\f1e8"; +$fa-var-twitter: "\f099"; +$fa-var-twitter-square: "\f081"; +$fa-var-umbrella: "\f0e9"; +$fa-var-underline: "\f0cd"; +$fa-var-undo: "\f0e2"; +$fa-var-universal-access: "\f29a"; +$fa-var-university: "\f19c"; +$fa-var-unlink: "\f127"; +$fa-var-unlock: "\f09c"; +$fa-var-unlock-alt: "\f13e"; +$fa-var-unsorted: "\f0dc"; +$fa-var-upload: "\f093"; +$fa-var-usb: "\f287"; +$fa-var-usd: "\f155"; +$fa-var-user: "\f007"; +$fa-var-user-circle: "\f2bd"; +$fa-var-user-circle-o: "\f2be"; +$fa-var-user-md: "\f0f0"; +$fa-var-user-o: "\f2c0"; +$fa-var-user-plus: "\f234"; +$fa-var-user-secret: "\f21b"; +$fa-var-user-times: "\f235"; +$fa-var-users: "\f0c0"; +$fa-var-vcard: "\f2bb"; +$fa-var-vcard-o: "\f2bc"; +$fa-var-venus: "\f221"; +$fa-var-venus-double: "\f226"; +$fa-var-venus-mars: "\f228"; +$fa-var-viacoin: "\f237"; +$fa-var-viadeo: "\f2a9"; +$fa-var-viadeo-square: "\f2aa"; +$fa-var-video-camera: "\f03d"; +$fa-var-vimeo: "\f27d"; +$fa-var-vimeo-square: "\f194"; +$fa-var-vine: "\f1ca"; +$fa-var-vk: "\f189"; +$fa-var-volume-control-phone: "\f2a0"; +$fa-var-volume-down: "\f027"; +$fa-var-volume-off: "\f026"; +$fa-var-volume-up: "\f028"; +$fa-var-warning: "\f071"; +$fa-var-wechat: "\f1d7"; +$fa-var-weibo: "\f18a"; +$fa-var-weixin: "\f1d7"; +$fa-var-whatsapp: "\f232"; +$fa-var-wheelchair: "\f193"; +$fa-var-wheelchair-alt: "\f29b"; +$fa-var-wifi: "\f1eb"; +$fa-var-wikipedia-w: "\f266"; +$fa-var-window-close: "\f2d3"; +$fa-var-window-close-o: "\f2d4"; +$fa-var-window-maximize: "\f2d0"; +$fa-var-window-minimize: "\f2d1"; +$fa-var-window-restore: "\f2d2"; +$fa-var-windows: "\f17a"; +$fa-var-won: "\f159"; +$fa-var-wordpress: "\f19a"; +$fa-var-wpbeginner: "\f297"; +$fa-var-wpexplorer: "\f2de"; +$fa-var-wpforms: "\f298"; +$fa-var-wrench: "\f0ad"; +$fa-var-xing: "\f168"; +$fa-var-xing-square: "\f169"; +$fa-var-y-combinator: "\f23b"; +$fa-var-y-combinator-square: "\f1d4"; +$fa-var-yahoo: "\f19e"; +$fa-var-yc: "\f23b"; +$fa-var-yc-square: "\f1d4"; +$fa-var-yelp: "\f1e9"; +$fa-var-yen: "\f157"; +$fa-var-yoast: "\f2b1"; +$fa-var-youtube: "\f167"; +$fa-var-youtube-play: "\f16a"; +$fa-var-youtube-square: "\f166"; + diff --git a/js/font-awesome/scss/font-awesome.scss b/js/font-awesome/scss/font-awesome.scss new file mode 100644 index 000000000..f1c83aaa5 --- /dev/null +++ b/js/font-awesome/scss/font-awesome.scss @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "animated"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; +@import "screen-reader"; diff --git a/js/jquery.anchorScroll.js b/js/jquery.anchorScroll.js new file mode 100644 index 000000000..76dea6175 --- /dev/null +++ b/js/jquery.anchorScroll.js @@ -0,0 +1,65 @@ +/*! + * jQuery.anchorScroll jQuery Plugin v1.0 + * + * Author: Virgiliu Diaconu + * http://www.virgiliu.com + * Licensed under the MIT license. + */ +; +(function($, window, document, undefined) { + 'use strict'; + $.anchorScroll = function(el, options) { + var base = this; + + // Access to jQuery and DOM versions of element + base.$el = $(el); + base.el = el; + + base.init = function() { + base.options = $.extend({}, $.anchorScroll.defaultOptions, options); + }; + + // On click + base.$el.click(function(e) { + e.preventDefault(); + if ($(e.target).closest('a').length && $(base.el.hash).length) { + var targetPos = $(base.el.hash).offset().top - base.options.offsetTop, + classTo = (base.$el.data("classTo") === "this") ? base.el : base.$el.data("classTo"), + onScroll = base.$el.data("onScroll"), + scrollEnd = base.$el.data("scrollEnd"); + // Callback scroll start + if (typeof base.options.scrollStart === 'function') { + base.options.scrollStart.call(el); + } + // Add class to element on scroll + $(classTo).addClass(onScroll).removeClass(scrollEnd); + // Smooth scroll + $('html,body').animate({ + scrollTop: targetPos + }, base.options.scrollSpeed).promise().done(function() { + // On animation complete + $(classTo).addClass(scrollEnd).removeClass(onScroll); + // Callback on scroll end + if (typeof base.options.scrollEnd === 'function') { + base.options.scrollEnd.call(el); + } + }); + } + }); + + // Run initializer + base.init(); + }; + + $.anchorScroll.defaultOptions = { + scrollSpeed: 800, + offsetTop: 0 + }; + + $.fn.anchorScroll = function(options) { + return this.each(function() { + (new $.anchorScroll(this, options)); + }); + }; + +})(jQuery, window, document); \ No newline at end of file diff --git a/js/jquery.bxslider.js b/js/jquery.bxslider.js new file mode 100644 index 000000000..02eb51191 --- /dev/null +++ b/js/jquery.bxslider.js @@ -0,0 +1,1374 @@ +/** + * BxSlider v4.1.1 - Fully loaded, responsive content slider + * http://bxslider.com + * + * Copyright 2013, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com + * Written while drinking Belgian ales and listening to jazz + * + * Released under the MIT license - http://opensource.org/licenses/MIT + */ + +;(function($){ + + var plugin = {}; + + var defaults = { + + // GENERAL + mode: 'horizontal', + slideSelector: '', + infiniteLoop: true, + hideControlOnEnd: false, + speed: 500, + easing: null, + slideMargin: 0, + startSlide: 0, + randomStart: false, + captions: false, + ticker: false, + tickerHover: false, + adaptiveHeight: false, + adaptiveHeightSpeed: 50, + video: false, + useCSS: true, + preloadImages: 'visible', + responsive: true, + + // TOUCH + touchEnabled: true, + swipeThreshold: 50, + oneToOneTouch: true, + preventDefaultSwipeX: true, + preventDefaultSwipeY: false, + + // PAGER + pager: true, + pagerType: 'full', + pagerShortSeparator: ' / ', + pagerSelector: null, + buildPager: null, + pagerCustom: null, + + // CONTROLS + controls: true, + nextText: 'Next', + prevText: 'Prev', + nextSelector: null, + prevSelector: null, + autoControls: false, + startText: 'Start', + stopText: 'Stop', + autoControlsCombine: false, + autoControlsSelector: null, + + // AUTO + auto: false, + pause: 4000, + autoStart: true, + autoDirection: 'next', + autoHover: false, + autoDelay: 0, + controlladd: false, + + // CAROUSEL + minSlides: 1, + maxSlides: 1, + moveSlides: 0, + slideWidth: 0, + + SUPPORTS_TOUCH : 'ontouchstart' in window, + + // CALLBACKS + onSliderLoad: function() {}, + onSlideBefore: function() {}, + onSlideAfter: function() {}, + onSlideNext: function() {}, + onSlidePrev: function() {}, + + //ADD + interval_arr: [] + } + + $.fn.bxSlider = function(options){ + + if(this.length == 0) return this; + + // support mutltiple elements + if(this.length > 1){ + this.each(function(){$(this).bxSlider(options)}); + return this; + } + + // create a namespace to be used throughout the plugin + var slider = {}; + // set a reference to our slider element + var el = this; + plugin.el = this; + + /** + * Makes slideshow responsive + */ + // first get the original window dimens (thanks alot IE) + var windowWidth = $(window).width(); + var windowHeight = $(window).height(); + + // Return if slider is already initialized + if ($(el).data('bxSlider')) { return; } + + /** + * =================================================================================== + * = PRIVATE FUNCTIONS + * =================================================================================== + */ + + /** + * Initializes namespace settings to be used throughout plugin + */ + var init = function(){ + // Return if slider is already initialized + if ($(el).data('bxSlider')) { return; } + // merge user-supplied options with the defaults + slider.settings = $.extend({}, defaults, options); + // parse slideWidth setting + slider.settings.slideWidth = parseInt(slider.settings.slideWidth); + // store the original children + slider.children = el.children(slider.settings.slideSelector); + // check if actual number of slides is less than minSlides / maxSlides + if(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length; + if(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length; + // if random start, set the startSlide setting to random number + if(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length); + // store active slide information + slider.active = { index: slider.settings.startSlide } + // store if the slider is in carousel mode (displaying / moving multiple slides) + slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1; + // if carousel, force preloadImages = 'all' + if(slider.carousel) slider.settings.preloadImages = 'all'; + // calculate the min / max width thresholds based on min / max number of slides + // used to setup and update carousel slides dimensions + slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin); + slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin); + // store the current state of the slider (if currently animating, working is true) + slider.working = false; + // initialize the controls object + slider.controls = {}; + // initialize an auto interval + slider.interval = null; + // determine which property to use for transitions + slider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left'; + // determine if hardware acceleration can be used + slider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){ + // create our test div element + var div = document.createElement('div'); + // css transition properties + var props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']; + // test for each property + for(var i in props){ + if(div.style[props[i]] !== undefined){ + slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase(); + slider.animProp = '-' + slider.cssPrefix + '-transform'; + return true; + } + } + return false; + }()); + var useTouchEvents = slider.settings.SUPPORTS_TOUCH; + slider.START_EV = useTouchEvents ? 'touchstart' : 'mousedown', + slider.MOVE_EV = useTouchEvents ? 'touchmove' : 'mousemove', + slider.END_EV = useTouchEvents ? 'touchend' : 'mouseup', + slider.LEAVE_EV = useTouchEvents ? null : 'mouseleave', //we manually detect leave on touch devices, so null event here + slider.CANCEL_EV = 'touchcancel'; + + // if vertical mode always make maxSlides and minSlides equal + if(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides; + // save original style data + el.data("origStyle", el.attr("style")); + el.children(slider.settings.slideSelector).each(function() { + $(this).data("origStyle", $(this).attr("style")); + }); + el.pause = slider.settings.pause; + // perform all DOM / CSS modifications + setup(); + } + + /** + * Performs all DOM and CSS modifications + */ + var setup = function(){ + // wrap el in a wrapper + el.wrap('