├── CryptoFramework ├── CommonCrypto │ ├── CommonCrypto.xcconfig │ ├── Info.plist │ ├── iphoneos.modulemap │ └── iphonesimulator.modulemap ├── Crypto.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── macsjh.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── macsjh.xcuserdatad │ │ └── xcschemes │ │ ├── CommonCrypto.xcscheme │ │ ├── Crypto.xcscheme │ │ └── xcschememanagement.plist └── Crypto │ ├── Algorithm │ ├── AES_256_ECB │ │ ├── AES_API.swift │ │ ├── NSAESData.swift │ │ └── NSAESString.swift │ ├── DictionaryEncryption.swift │ ├── ENCDictionary.swift │ ├── LowLevelEncryption.swift │ └── MessageDigest.swift │ ├── Crypto.h │ ├── Info.plist │ ├── NSDataExtension.swift │ └── StringExtension.swift ├── Dictionary ├── holeworddict.txt └── singlechar.txt ├── Licence ├── README.md └── Server ├── contact ├── config.php └── contact.php ├── css ├── animate.css ├── bootstrap-theme.css ├── bootstrap.css ├── font-awesome.css ├── isotope.css ├── overwrite.css └── style.css ├── fonts ├── fontawesome │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ └── fontawesome-webfont.woff ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.eot@ ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── img ├── parallax │ ├── img1.jpg │ ├── img2.jpg │ └── img3.jpg ├── portfolio │ ├── img1.jpg │ ├── img10.jpg │ ├── img11.jpg │ ├── img12.jpg │ ├── img2.jpg │ ├── img3.jpg │ ├── img4.jpg │ ├── img5.jpg │ ├── img6.jpg │ ├── img7.jpg │ ├── img8.jpg │ └── img9.jpg ├── slides │ ├── slide1.png │ ├── slide2.png │ └── slide3.png └── team │ ├── member1.jpg │ ├── member2.jpg │ ├── member2.png │ ├── member3.jpg │ ├── member3.png │ └── member4.jpg ├── index.html ├── js ├── bootstrap.min.js ├── fancybox │ ├── Descr.WD3 │ ├── blank.gif │ ├── fancybox_loading.gif │ ├── fancybox_loading_402x.gif │ ├── fancybox_overlay.png │ ├── fancybox_sprite.png │ ├── fancybox_sprite_402x.png │ ├── jquery.fancybox.css │ └── jquery.fancybox.pack.js ├── jquery.appear.js ├── jquery.easing.1.3.js ├── jquery.isotope.min.js ├── jquery.js ├── jquery.localscroll-1.2.7-min.js ├── jquery.nicescroll.min.js ├── jquery.scrollTo-1.4.3.1-min.js ├── main.js ├── modernizr-2.6.2-respond-1.1.0.min.js ├── skrollr.min.js ├── stellar.js └── validate.js └── skin └── default.css /CryptoFramework/CommonCrypto/CommonCrypto.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // CommonCrypto.xcconfig 3 | // Heimdall 4 | // 5 | // Created by Henri Normak on 09/05/15. 6 | // Copyright (c) 2015 Henri Normak. All rights reserved. 7 | // 8 | 9 | MODULEMAP_FILE[sdk=iphoneos*] = $(SRCROOT)/CommonCrypto/iphoneos.modulemap 10 | MODULEMAP_FILE[sdk=iphonesimulator*] = $(SRCROOT)/CommonCrypto/iphonesimulator.modulemap -------------------------------------------------------------------------------- /CryptoFramework/CommonCrypto/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CryptoFramework/CommonCrypto/iphoneos.modulemap: -------------------------------------------------------------------------------- 1 | module CommonCrypto [system] { 2 | header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /CryptoFramework/CommonCrypto/iphonesimulator.modulemap: -------------------------------------------------------------------------------- 1 | module CommonCrypto [system] { 2 | header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/usr/include/CommonCrypto/CommonCrypto.h" 3 | export * 4 | } 5 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto.xcodeproj/project.xcworkspace/xcuserdata/macsjh.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoManTeam/Hole/2976bcb13716a4ccc8dba17ffae72cd29515d79d/CryptoFramework/Crypto.xcodeproj/project.xcworkspace/xcuserdata/macsjh.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /CryptoFramework/Crypto.xcodeproj/xcuserdata/macsjh.xcuserdatad/xcschemes/CommonCrypto.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto.xcodeproj/xcuserdata/macsjh.xcuserdatad/xcschemes/Crypto.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto.xcodeproj/xcuserdata/macsjh.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CommonCrypto.xcscheme 8 | 9 | orderHint 10 | 1 11 | 12 | Crypto.xcscheme 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 93BCC3621BD28126003F6ECE 21 | 22 | primary 23 | 24 | 25 | 93BCC3871BD282A6003F6ECE 26 | 27 | primary 28 | 29 | 30 | 93BCC3951BD282C4003F6ECE 31 | 32 | primary 33 | 34 | 35 | 93BCC3A21BD282E9003F6ECE 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/AES_256_ECB/AES_API.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AES.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/9/24. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | /** 13 | AES_256_ECB加密API 14 | 15 | - Parameter plainText: 要加密的明文 16 | - Parameter key: 密码(长度任意,会转换为MD5值) 17 | - Returns: 加密后的密文(base64编码字符串) 18 | */ 19 | func aesEncrypt(plainText:NSString, var key:String) -> NSString? 20 | { 21 | key = MessageDigest.md5(key) 22 | let base64PlainText = LowLevelEncryption.base64Encode(plainText) 23 | if(base64PlainText != nil) 24 | { 25 | let cipherText = NSAESString.aes256_encrypt(base64PlainText!, Key: key) 26 | if(cipherText != nil) 27 | { 28 | return LowLevelEncryption.base64Encode(cipherText!) 29 | } 30 | } 31 | return nil 32 | } 33 | 34 | /** 35 | AES_256_ECB解密API 36 | 37 | - Parameter plainText: 要解密的密文 38 | - Parameter key: 密码(长度任意,会转换为MD5值) 39 | - Returns: 明文(base64编码字符串) 40 | */ 41 | func aesDecrypt(cipherText:NSString, var key:String) -> NSString? 42 | { 43 | key = MessageDigest.md5(key) 44 | let originCipherText = LowLevelEncryption.base64Decode(cipherText) 45 | if(originCipherText != nil) 46 | { 47 | let base64CipherText = NSAESString.aes256_decrypt(originCipherText!, key: key) 48 | if (base64CipherText != nil) 49 | { 50 | return LowLevelEncryption.base64Decode(base64CipherText!) 51 | } 52 | } 53 | return nil 54 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/AES_256_ECB/NSAESData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSAESData.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/10/17. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CommonCrypto 11 | 12 | extension NSData 13 | { 14 | func aes256_encrypt(key:NSString) -> NSData? //加密 15 | { 16 | let keyPtr:UnsafeMutablePointer = UnsafeMutablePointer.alloc(kCCKeySizeAES256+1) 17 | bzero(keyPtr, kCCKeySizeAES256+1) 18 | key.getCString(keyPtr, maxLength: kCCKeySizeAES256+1, encoding: NSUTF8StringEncoding) 19 | let dataLength:Int = self.length 20 | let bufferSize:size_t = dataLength + kCCBlockSizeAES128 21 | let buffer:UnsafeMutablePointer = malloc(bufferSize) 22 | var numBytesEncrypted:size_t = 0 23 | let cryptStatus:CCCryptorStatus = CCCrypt(CCOperation(kCCEncrypt), CCAlgorithm(kCCAlgorithmAES128), 24 | CCOptions(kCCOptionPKCS7Padding | kCCOptionECBMode), 25 | keyPtr, kCCBlockSizeAES128, 26 | nil, 27 | self.bytes, dataLength, 28 | buffer, bufferSize, 29 | &numBytesEncrypted) 30 | if (UInt32(cryptStatus) == UInt32(kCCSuccess)) { 31 | return NSData(bytesNoCopy:buffer, length:numBytesEncrypted); 32 | } 33 | free(buffer) 34 | return nil; 35 | } 36 | 37 | func aes256_decrypt(key:NSString) -> NSData? //解密 38 | { 39 | let keyPtr:UnsafeMutablePointer = UnsafeMutablePointer.alloc(kCCKeySizeAES256+1) 40 | bzero(keyPtr, kCCKeySizeAES256+1) 41 | key.getCString(keyPtr, maxLength: kCCKeySizeAES256+1, encoding: NSUTF8StringEncoding) 42 | let dataLength:Int = self.length 43 | let bufferSize:size_t = dataLength + kCCBlockSizeAES128 44 | let buffer:UnsafeMutablePointer = malloc(bufferSize) 45 | var numBytesDecrypted:size_t = 0 46 | let cryptStatus:CCCryptorStatus = CCCrypt(CCOperation(kCCDecrypt), CCAlgorithm(kCCAlgorithmAES128), 47 | CCOptions(kCCOptionPKCS7Padding | kCCOptionECBMode), 48 | keyPtr, kCCBlockSizeAES128, 49 | nil, 50 | self.bytes, dataLength, 51 | buffer, bufferSize, 52 | &numBytesDecrypted) 53 | if (UInt32(cryptStatus) == UInt32(kCCSuccess)) { 54 | return NSData(bytesNoCopy: buffer, length:numBytesDecrypted); 55 | } 56 | free(buffer); 57 | return nil; 58 | } 59 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/AES_256_ECB/NSAESString.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSAESString.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/10/17. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | class NSAESString:NSObject 11 | { 12 | internal static func aes256_encrypt(PlainText:NSString, Key:NSString) -> NSString? 13 | { 14 | let cstr:UnsafePointer = PlainText.cStringUsingEncoding(NSUTF8StringEncoding) 15 | let data = NSData(bytes: cstr, length:PlainText.length) 16 | //对数据进行加密 17 | let result = data.aes256_encrypt(Key) 18 | if (result != nil && result!.length > 0 ) { 19 | return result!.toHexString() 20 | } 21 | return nil 22 | } 23 | 24 | internal static func aes256_decrypt(CipherText:String, key:NSString) -> NSString? 25 | { 26 | //转换为2进制Data 27 | guard let data = CipherText.hexStringToData() else {return nil} 28 | //对数据进行解密 29 | let result = data.aes256_decrypt(key) 30 | if (result != nil && result!.length > 0) { 31 | return NSString(data:result!, encoding:NSUTF8StringEncoding) 32 | } 33 | return nil 34 | } 35 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/DictionaryEncryption.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DictionaryEncryption.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/9/28. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | ///字典加密算法 12 | public class DictionaryEncryption { 13 | 14 | 15 | ///将明文按照字典映射为密文 16 | /// 17 | ///- Parameter plainText: 待加密的明文 18 | ///- Parameter encDictionary: 映射用的字典 19 | ///- Returns: 加密后的密文(均为可打印字符) 20 | public static func dictionaryEncrypt(plainText: String, encDictionary: Dictionary) -> String 21 | { 22 | var cipherText: String = "" 23 | for char in plainText.characters 24 | { 25 | let encChar = encDictionary[String(char)] 26 | if(encChar != nil) 27 | { 28 | cipherText += encChar! 29 | } 30 | else 31 | { 32 | cipherText += String(char) 33 | } 34 | } 35 | return cipherText 36 | } 37 | 38 | 39 | ///将密文按照字典反映射为明文 40 | /// 41 | ///- Parameter plainText: 待加密的明文 42 | ///- Parameter encDictionary: 映射用的字典(与加密用的字典相同) 43 | ///- Returns: 解密后的明文 44 | public static func dictionaryDecrypt(cipherText: String, encDictionary: Dictionary) -> String 45 | { 46 | var plainText: String = "" 47 | for char in cipherText.characters 48 | { 49 | var HasKey = false 50 | for (key, value) in encDictionary 51 | { 52 | if(String(char) == value) 53 | { 54 | plainText += key 55 | HasKey = true 56 | break 57 | } 58 | } 59 | if(!HasKey) 60 | { 61 | plainText += String(char) 62 | } 63 | } 64 | return plainText 65 | } 66 | 67 | ///读取Json文件为Dictionary变量 68 | /// 69 | ///- Parameter plainText: Json文件绝对路径名 70 | ///- Returns: 读出的Dictionary 71 | public static func dictionaryDecrypt(cipherText: String, encDictionary: Dictionary) -> String 72 | { 73 | if (encDictionary == morseDictionary){ 74 | var temp: String = cipherText 75 | for (key, value) in encDictionary{ 76 | guard let range = temp.rangeOfString(value) else {continue} 77 | if range.startIndex == value.startIndex{ 78 | temp.replaceRange(range, with: " " + key + " ") 79 | } 80 | var srange = temp.rangeOfString(" " + value) 81 | while srange != nil{ 82 | temp.replaceRange(srange!, with: " " + key + " ") 83 | srange = temp.rangeOfString(" " + value) 84 | } 85 | } 86 | var plainText = "" 87 | for char in temp.characters{ 88 | if(char != " "){ 89 | plainText.append(char) 90 | } 91 | } 92 | return plainText 93 | } 94 | else{ 95 | var plainText: String = "" 96 | for char in cipherText.characters 97 | { 98 | var HasKey = false 99 | for (key, value) in encDictionary 100 | { 101 | if(String(char) == value) 102 | { 103 | plainText += key 104 | HasKey = true 105 | break 106 | } 107 | } 108 | if(!HasKey) 109 | { 110 | plainText += String(char) 111 | } 112 | } 113 | return plainText 114 | } 115 | } 116 | 117 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/ENCDictionary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiDictionary.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/10/1. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /// 英文字符Emoji字典(含英文半角符号) 12 | let englishEmojiDictionary:Dictionary = 13 | [ 14 | "a": "😄", "b": "😁", "c": "😂", "d": "😃", "e": "😄", "f": "😅", "g": "😆", "h": "😇", 15 | "i": "😈", "j": "👿", "k": "😉", "l": "😊", "m": "☺️", "n": "😋", "o": "😌", "p": "😍", 16 | "q": "😎", "r": "😏", "s": "😐", "t": "😑", "u": "😒", "v": "😓", "w": "😔", "x": "😕", 17 | "y": "😖", "z": "😗", 18 | 19 | "~": "😘", "!": "😙", "@": "😚", "#": "😛", "$": "😜", "%": "😝", "^": "😞", "&": "😟", 20 | "*": "😠", "(": "😡", ")": "😢", "_": "😣", "+": "😤", "`": "😥", "-": "😦", "=": "😧", 21 | "{": "😨", "}": "😩", "|": "😪", "[": "😫", "]": "😬", "\\": "😭", ":": "😮", "\"": "😯", 22 | ";": "😰", "'": "😱", "<": "😲", ">": "😳", "?": "😴", ",": "😵", ".": "😶", "/": "😷", 23 | " ": "😸", 24 | 25 | "A": "😸", "B": "😹", "C": "😻", "D": "😼", "E": "😽", "F": "🙀", "G": "😿", "H": "😾", 26 | "I": "🙌", "J": "👏", "K": "👋", "L": "👍", "M": "👊", "N": "✊", "O": "✌️", "P": "👌", 27 | "Q": "✋", "R": "👐", "S": "💪", "T": "🙏", "U": "☝️", "V": "👆", "W": "👇", "X": "👈", 28 | "Y": "👉", "Z": "🖕" 29 | ] 30 | 31 | let morseDictionary:Dictionary = 32 | [ 33 | "A" : ".━ ", 34 | "E" : ". ", 35 | "I" : ".. ", 36 | "M" : "━━ ", 37 | "Q" : "━━.━ ", 38 | "U" : "..━ ", 39 | "Y" : "━.━━ ", 40 | "0" : "━━━━━ ", 41 | "4" : "....━ ", 42 | "8" : "━━━.. ", 43 | "." : ".━.━.━ ", 44 | "?" : "..━━.. ", 45 | "!" : "━.━.━━ ", 46 | "(" : "━.━━. ", 47 | "@" : ".━━.━. ", 48 | "B" : "━... ", 49 | "F" : "..━. ", 50 | "J" : ".━━━ ", 51 | "N" : "━. ", 52 | "R" : ".━. ", 53 | "V" : "...━ ", 54 | "Z" : "━━.. ", 55 | "1" : ".━━━━ ", 56 | "5" : "..... ", 57 | "9" : "━━━━. ", 58 | ":" : "━━━... ", 59 | "=" : "━...━ ", 60 | "━" : "━....━ ", 61 | ")" : "━.━━.━ ", 62 | "C" : "━.━. ", 63 | "G" : "━━. ", 64 | "K" : "━.━ ", 65 | "O" : "━━━ ", 66 | "S" : "... ", 67 | "W" : ".━━ ", 68 | "2" : "..━━━ ", 69 | "6" : "━.... ", 70 | "," : "━━..━━ ", 71 | "'" : ".━━━━. ", 72 | "_" : "..━━.━ ", 73 | "$" : "...━..━ ", 74 | "D" : "━.. ", 75 | "H" : ".... ", 76 | "L" : ".━.. ", 77 | "P" : ".━━. ", 78 | "T" : "━ ", 79 | "X" : "━..━ ", 80 | "3" : "...━━ ", 81 | "7" : "━━... ", 82 | ";" : "━.━.━. ", 83 | "/" : "━..━. ", 84 | "\"" : ".━..━. ", 85 | "&" : ".━... " 86 | ] 87 | 88 | // TODO: 更改Emoji字典存取方式 -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/LowLevelEncryption.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RandomText.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/9/28. 6 | // Copyright © 2015年 Marcin Krzyzanowski. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | ///低级加密算法 12 | public class LowLevelEncryption { 13 | 14 | ///符号集 15 | public static let symbols = ".,!?/\\+=-_;:\"'#$%^&*~∙<>(){}[]|®©™℠×÷。,!?、\\;:♬—“”‘’#¥%^&*~•《》(){}【】…→←↑↓✓✕ " 16 | 17 | ///英文小写字母集 18 | public static let englishCharacter:String = "abcdefghijklmnopqrstuvwxyz" 19 | 20 | ///英文大写字母集 21 | public static let bigEnglishCharacter:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 22 | 23 | ///将明文按一定分隔符分隔成多个单元,并按照随机顺序重组的算法 24 | ///- 明文需要一定长度,打乱才有意义 25 | ///- 无解密算法(需要正常成年人水平的语义分析才有可能解密) 26 | /// 27 | ///- Parameter plainText: 待加密的明文 28 | ///- Parameter splitChars: 分隔字符集,决定明文以何种方式分隔,留空则以1个NSString单位长度分割 29 | ///- Returns: 加密后的密文(均为可打印字符) 30 | public static func randomText(plainText:NSString, splitChars:String?) -> String 31 | { 32 | var charSet:[String] = [] 33 | for (var i = 0; i < plainText.length; ++i) 34 | { 35 | if(splitChars == nil) 36 | { 37 | let temp = plainText.substringFromIndex(i) 38 | charSet.append(NSString(string: temp).substringToIndex(1)) 39 | } 40 | else 41 | { 42 | var j:Int 43 | var word:String = "" 44 | for(j = i; j < plainText.length; ++j) 45 | { 46 | let temp = plainText.substringFromIndex(j) 47 | let char = NSString(string: temp).substringToIndex(1) 48 | var isEqualToUnit = false 49 | for unit in splitChars!.characters 50 | { 51 | if (char == String(unit)) 52 | { 53 | isEqualToUnit = true 54 | break 55 | } 56 | } 57 | if isEqualToUnit == true 58 | { 59 | break 60 | } 61 | } 62 | if(j > plainText.length) 63 | { 64 | word = plainText.substringFromIndex(i) 65 | break 66 | } 67 | else 68 | { 69 | var temp = plainText.substringFromIndex(i) 70 | word = NSString(string: temp).substringToIndex(j-i) 71 | temp = plainText.substringFromIndex(j) 72 | if(temp != "") 73 | { 74 | charSet.append(NSString(string: temp).substringToIndex(1)) 75 | } 76 | i = j 77 | } 78 | charSet.append(word) 79 | } 80 | } 81 | 82 | var RandomString:String = "" 83 | while(charSet.count != 0) 84 | { 85 | let randNum = Int(arc4random_uniform(UInt32(charSet.count))) 86 | RandomString += charSet[randNum] 87 | charSet.removeAtIndex(randNum) 88 | } 89 | return RandomString 90 | } 91 | 92 | ///将英文按照字母表的顺序、中文按照密语输入法汉字字库中的顺序,偏移指定的量 93 | /// 94 | ///- Parameter plainText: 待加密的明文 95 | ///- Parameter Shift: 偏移量,不应为零,加解密时的偏移量应互为相反数 96 | ///- Returns: 加密后的密文(均为可打印字符) 97 | public static func caesarCode(plainText: String, shift:Int) -> String 98 | { 99 | var cipherText = "" 100 | for(var i = 0; i < plainText.characters.count; ++i) 101 | { 102 | var isEChar = false 103 | for(var j = 0; j < englishCharacter.characters.count; ++j) 104 | { 105 | if englishCharacter[englishCharacter.startIndex.advancedBy(j)] == plainText[plainText.startIndex.advancedBy(i)] 106 | { 107 | var shiftIndex = (shift + j) % 26 108 | if(shiftIndex < 0) 109 | { 110 | shiftIndex += 26 111 | } 112 | cipherText.append(englishCharacter[englishCharacter.startIndex.advancedBy(shiftIndex)]) //.appendFormat("%c", eChar[shiftIndex]) 113 | isEChar = true 114 | break 115 | } 116 | else if bigEnglishCharacter[bigEnglishCharacter.startIndex.advancedBy(j)] == plainText[plainText.startIndex.advancedBy(i)] 117 | { 118 | var shiftIndex = (shift + j) % 26 119 | if(shiftIndex < 0) 120 | { 121 | shiftIndex += 26 122 | } 123 | cipherText.append(bigEnglishCharacter[bigEnglishCharacter.startIndex.advancedBy(shiftIndex)]) //Format("%c", bEChar[shiftIndex]) 124 | isEChar = true 125 | break 126 | } 127 | } 128 | if(isEChar == false) 129 | { 130 | cipherText.append(plainText[plainText.startIndex.advancedBy(i)]) 131 | } 132 | } 133 | return cipherText 134 | // TODO: 增加中文凯撒加密算法 135 | } 136 | 137 | ///将明文转换为base64编码的字符串 138 | /// 139 | ///- Parameter plainText: 待编码的明文 140 | ///- Returns: base64编码的字符串(均为可打印字符) 141 | public static func base64Encode(plainText:NSString) -> String? 142 | { 143 | let sourceData = plainText.dataUsingEncoding(NSUTF8StringEncoding) 144 | if(sourceData != nil){ 145 | return sourceData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 146 | } 147 | else { 148 | return nil 149 | } 150 | } 151 | 152 | ///对base64编码的字符串进行解码 153 | /// 154 | ///- Parameter plainText: 待编码的明文 155 | ///- Returns: 解码后的字符串(均为可打印字符) 156 | public static func base64Decode(cipherText:NSString) -> String? 157 | { 158 | let sourceData = NSData(base64EncodedString: cipherText as String, options: NSDataBase64DecodingOptions(rawValue: 0)) 159 | if(sourceData != nil) 160 | { 161 | return String(data: sourceData!, encoding: NSUTF8StringEncoding) 162 | } 163 | return nil 164 | } 165 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Algorithm/MessageDigest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MD5.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/9/30. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CommonCrypto 11 | 12 | ///信息摘要算法集,用于验证数据完整性、变长字符串转换为定长、数字签名等 13 | class MessageDigest 14 | { 15 | internal static func md5(str:String) -> String{ 16 | let cStr = (str as NSString).UTF8String 17 | let buffer = UnsafeMutablePointer.alloc(16) 18 | CC_MD4(cStr,(CC_LONG)(strlen(cStr)), buffer) 19 | let md5String = NSMutableString() 20 | for var i = 0; i < 8; ++i 21 | { 22 | md5String.appendFormat("%02x", buffer [i]) 23 | } 24 | free(buffer) 25 | return md5String as String 26 | } 27 | // TODO: Add more algorithm such as sha1、sha256 28 | } -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Crypto.h: -------------------------------------------------------------------------------- 1 | // 2 | // Crypto.h 3 | // Crypto 4 | // 5 | // Created by macsjh on 15/10/17. 6 | // Copyright © 2015年 TurboExtension. All rights reserved. 7 | // 8 | 9 | @import Foundation; 10 | 11 | //! Project version number for Crypto. 12 | FOUNDATION_EXPORT double CryptoVersionNumber; 13 | 14 | //! Project version string for Crypto. 15 | FOUNDATION_EXPORT const unsigned char CryptoVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto/NSDataExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PGPDataExtension.swift 3 | // SwiftPGP 4 | // 5 | // Created by Marcin Krzyzanowski on 05/07/14. 6 | // Copyright (c) 2014 Marcin Krzyzanowski. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSMutableData { 12 | /** Convenient way to append bytes */ 13 | internal func appendBytes(arrayOfBytes: [UInt8]) { 14 | self.appendBytes(arrayOfBytes, length: arrayOfBytes.count) 15 | } 16 | } 17 | 18 | extension NSData { 19 | 20 | public func checksum() -> UInt16 { 21 | var s:UInt32 = 0; 22 | 23 | var bytesArray = self.arrayOfBytes() 24 | 25 | for (var i = 0; i < bytesArray.count; i++) { 26 | _ = bytesArray[i] 27 | s = s + UInt32(bytesArray[i]) 28 | } 29 | s = s % 65536; 30 | return UInt16(s); 31 | } 32 | 33 | public func toHexString() -> String { 34 | let count = self.length / sizeof(UInt8) 35 | var bytesArray = [UInt8](count: count, repeatedValue: 0) 36 | self.getBytes(&bytesArray, length:count * sizeof(UInt8)) 37 | 38 | var s:String = ""; 39 | for byte in bytesArray { 40 | s = s + String(format:"%02x", byte) 41 | } 42 | return s 43 | } 44 | 45 | public func arrayOfBytes() -> [UInt8] { 46 | let count = self.length / sizeof(UInt8) 47 | var bytesArray = [UInt8](count: count, repeatedValue: 0) 48 | self.getBytes(&bytesArray, length:count * sizeof(UInt8)) 49 | return bytesArray 50 | } 51 | 52 | class public func withBytes(bytes: [UInt8]) -> NSData { 53 | return NSData(bytes: bytes, length: bytes.count) 54 | } 55 | } 56 | 57 | -------------------------------------------------------------------------------- /CryptoFramework/Crypto/StringExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringExtension.swift 3 | // 密语输入法 4 | // 5 | // Created by macsjh on 15/12/2. 6 | // Copyright © 2015年 macsjh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String 12 | { 13 | func subString(fromIndex:Int, length:Int) -> String 14 | { 15 | let temp = NSString(string: self) 16 | let tempFrom = NSString(string: temp.substringFromIndex(fromIndex)) 17 | return tempFrom.substringToIndex(length) 18 | } 19 | 20 | ///返回给定字符串在本串中的位置,不存在返回-1 21 | func indexOf(string: String) -> Int 22 | { 23 | let range = NSString(string: self).rangeOfString(string) 24 | if(range.length < 1) 25 | { 26 | return -1 27 | } 28 | return range.location 29 | } 30 | 31 | var intValue:Int? 32 | { 33 | get{ 34 | return NSNumberFormatter().numberFromString(self)?.integerValue 35 | } 36 | } 37 | 38 | ///将表示十六进制数据的字符串转换为对应的二进制数据 39 | /// 40 | ///- Parameter string:形如“6E7C2F”的字符串 41 | ///- Returns: 对应的二进制数据 42 | public func hexStringToData() ->NSData? 43 | { 44 | let hexString:NSString = self.uppercaseString.stringByReplacingOccurrencesOfString(" ", withString:"") 45 | if (hexString.length % 2 != 0) { 46 | return nil 47 | } 48 | var tempbyt:[UInt8] = [0] 49 | let bytes = NSMutableData(capacity: hexString.length / 2) 50 | for(var i = 0; i < hexString.length; ++i) 51 | { 52 | let hex_char1:unichar = hexString.characterAtIndex(i) 53 | var int_ch1:Int 54 | if(hex_char1 >= 48 && hex_char1 <= 57) 55 | { 56 | int_ch1 = (Int(hex_char1) - 48) * 16 57 | } 58 | else if(hex_char1 >= 65 && hex_char1 <= 70) 59 | { 60 | int_ch1 = (Int(hex_char1) - 55) * 16 61 | } 62 | else 63 | { 64 | return nil; 65 | } 66 | i++; 67 | let hex_char2:unichar = hexString.characterAtIndex(i) 68 | var int_ch2:Int 69 | if(hex_char2 >= 48 && hex_char2 <= 57) 70 | { 71 | int_ch2 = (Int(hex_char2) - 48) 72 | } 73 | else if(hex_char2 >= 65 && hex_char2 <= 70) 74 | { 75 | int_ch2 = Int(hex_char2) - 55; 76 | } 77 | else 78 | { 79 | return nil; 80 | } 81 | 82 | tempbyt[0] = UInt8(int_ch1 + int_ch2) 83 | bytes!.appendBytes(tempbyt, length:1) 84 | } 85 | return bytes; 86 | } 87 | } -------------------------------------------------------------------------------- /Licence: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hole——密语输入法,从源头保障您的隐私安全 2 | ⚠️ 此项目已中止 3 | ###### 本项目仅为密语输入法的开源部分,由于某些原因,密语输入法暂时不能全部开源,若造成不便,请谅解。 4 | 5 | ### 密语输入法版本 6 | 当前在售:Discontinued 7 | 主要内容:新增高度调节,优化键盘按钮布局,修复大量重要bug,确保所有功能正常。 8 | ~~详见[App Store](https://appsto.re/cn/RzEw_.i)~~ 9 | 10 | ### 密语 web 服务 11 | 无需安装,免费使用的加解密服务 12 | ~~[点此立刻使用](https://extens10n.github.io/hole-for-web/)~~ 13 | 14 | ### 开发计划 15 | 正在开发:密语输入法 v2.0 16 | 17 | 新功能预告: 18 | 1. 界面彻底美化; 19 | 2. 增加英文词典; 20 | 3. 英文本地化; 21 | 4. 调整销售策略,下调中国区售价; 22 | 5. 修复bug; 23 | 24 | ### 开源内容摘要 25 | 1. 服务器端实现代码(限于团队实力,为了保障安全,需借助公共集体智慧) 26 | 2. 部分加密算法实现细节(以使有需要的人,在不使用本输入法时,只要有密钥,也能正常解密本输入法加密的内容) 27 | 3. 输入法所用词库(文件格式仅因开源方便而制成文本) 28 | 29 | ### 加密算法 30 | 1. 随机打乱(不适用于文件) 31 | 2. 凯撒密码(仅适用于英文字母,文件转换为十六进制数,对其中的字母移位) 32 | 3. Base 64 33 | 4. 字典加密(目前涵盖Emoji字典、摩尔斯摩尔斯码表,加密能力以字典为限) 34 | 5. AES-256-ECB(加密后的数据使用Base 64输出) 35 | 36 | ### Licence 37 | 38 | Unlicence 39 | 40 | 词库部分: 41 | 42 | 词库词汇来源:CC-CEDICT,License: http://creativecommons.org/licenses/by-sa/3.0/ 43 | 44 | 词频信息来源:https://github.com/ling0322/webdict 45 | -------------------------------------------------------------------------------- /Server/contact/config.php: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /Server/contact/contact.php: -------------------------------------------------------------------------------- 1 | \r\n" 30 | ."Reply-To: ".$email."\r\n" 31 | ."X-Mailer: PHP/" . phpversion()); 32 | 33 | 34 | if($mail) 35 | { 36 | echo 'OK'; 37 | } 38 | 39 | } 40 | 41 | 42 | } 43 | ?> -------------------------------------------------------------------------------- /Server/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.0 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn:active, 33 | .btn.active { 34 | background-image: none; 35 | } 36 | .btn-default { 37 | text-shadow: 0 1px 0 #fff; 38 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 39 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 40 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 41 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 42 | background-repeat: repeat-x; 43 | border-color: #dbdbdb; 44 | border-color: #ccc; 45 | } 46 | .btn-default:hover, 47 | .btn-default:focus { 48 | background-color: #e0e0e0; 49 | background-position: 0 -15px; 50 | } 51 | .btn-default:active, 52 | .btn-default.active { 53 | background-color: #e0e0e0; 54 | border-color: #dbdbdb; 55 | } 56 | .btn-primary { 57 | background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); 58 | background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); 59 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); 60 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 61 | background-repeat: repeat-x; 62 | border-color: #2b669a; 63 | } 64 | .btn-primary:hover, 65 | .btn-primary:focus { 66 | background-color: #2d6ca2; 67 | background-position: 0 -15px; 68 | } 69 | .btn-primary:active, 70 | .btn-primary.active { 71 | background-color: #2d6ca2; 72 | border-color: #2b669a; 73 | } 74 | .btn-success { 75 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 76 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 77 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 78 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 79 | background-repeat: repeat-x; 80 | border-color: #3e8f3e; 81 | } 82 | .btn-success:hover, 83 | .btn-success:focus { 84 | background-color: #419641; 85 | background-position: 0 -15px; 86 | } 87 | .btn-success:active, 88 | .btn-success.active { 89 | background-color: #419641; 90 | border-color: #3e8f3e; 91 | } 92 | .btn-info { 93 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 94 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 95 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 96 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 97 | background-repeat: repeat-x; 98 | border-color: #28a4c9; 99 | } 100 | .btn-info:hover, 101 | .btn-info:focus { 102 | background-color: #2aabd2; 103 | background-position: 0 -15px; 104 | } 105 | .btn-info:active, 106 | .btn-info.active { 107 | background-color: #2aabd2; 108 | border-color: #28a4c9; 109 | } 110 | .btn-warning { 111 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 112 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 113 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 114 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 115 | background-repeat: repeat-x; 116 | border-color: #e38d13; 117 | } 118 | .btn-warning:hover, 119 | .btn-warning:focus { 120 | background-color: #eb9316; 121 | background-position: 0 -15px; 122 | } 123 | .btn-warning:active, 124 | .btn-warning.active { 125 | background-color: #eb9316; 126 | border-color: #e38d13; 127 | } 128 | .btn-danger { 129 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 130 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 131 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 132 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 133 | background-repeat: repeat-x; 134 | border-color: #b92c28; 135 | } 136 | .btn-danger:hover, 137 | .btn-danger:focus { 138 | background-color: #c12e2a; 139 | background-position: 0 -15px; 140 | } 141 | .btn-danger:active, 142 | .btn-danger.active { 143 | background-color: #c12e2a; 144 | border-color: #b92c28; 145 | } 146 | .thumbnail, 147 | .img-thumbnail { 148 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 149 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 150 | } 151 | .dropdown-menu > li > a:hover, 152 | .dropdown-menu > li > a:focus { 153 | background-color: #e8e8e8; 154 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 155 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 156 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 157 | background-repeat: repeat-x; 158 | } 159 | .dropdown-menu > .active > a, 160 | .dropdown-menu > .active > a:hover, 161 | .dropdown-menu > .active > a:focus { 162 | background-color: #357ebd; 163 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 164 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 165 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 166 | background-repeat: repeat-x; 167 | } 168 | .navbar-default { 169 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 170 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 171 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 172 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 173 | background-repeat: repeat-x; 174 | border-radius: 4px; 175 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 176 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 177 | } 178 | .navbar-default .navbar-nav > .active > a { 179 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); 180 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); 181 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); 182 | background-repeat: repeat-x; 183 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 184 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 185 | } 186 | .navbar-brand, 187 | .navbar-nav > li > a { 188 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 189 | } 190 | .navbar-inverse { 191 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 192 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 193 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 194 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 195 | background-repeat: repeat-x; 196 | } 197 | .navbar-inverse .navbar-nav > .active > a { 198 | background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); 199 | background-image: linear-gradient(to bottom, #222 0%, #282828 100%); 200 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); 201 | background-repeat: repeat-x; 202 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 203 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 204 | } 205 | .navbar-inverse .navbar-brand, 206 | .navbar-inverse .navbar-nav > li > a { 207 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 208 | } 209 | .navbar-static-top, 210 | .navbar-fixed-top, 211 | .navbar-fixed-bottom { 212 | border-radius: 0; 213 | } 214 | .alert { 215 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 216 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 217 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 218 | } 219 | .alert-success { 220 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 221 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 222 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 223 | background-repeat: repeat-x; 224 | border-color: #b2dba1; 225 | } 226 | .alert-info { 227 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 228 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 230 | background-repeat: repeat-x; 231 | border-color: #9acfea; 232 | } 233 | .alert-warning { 234 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 235 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 236 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 237 | background-repeat: repeat-x; 238 | border-color: #f5e79e; 239 | } 240 | .alert-danger { 241 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 242 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 243 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 244 | background-repeat: repeat-x; 245 | border-color: #dca7a7; 246 | } 247 | .progress { 248 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 249 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 250 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 251 | background-repeat: repeat-x; 252 | } 253 | .progress-bar { 254 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); 255 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 256 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 257 | background-repeat: repeat-x; 258 | } 259 | .progress-bar-success { 260 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 261 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 262 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 263 | background-repeat: repeat-x; 264 | } 265 | .progress-bar-info { 266 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 267 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 268 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 269 | background-repeat: repeat-x; 270 | } 271 | .progress-bar-warning { 272 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 273 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 274 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 275 | background-repeat: repeat-x; 276 | } 277 | .progress-bar-danger { 278 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 279 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 280 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 281 | background-repeat: repeat-x; 282 | } 283 | .list-group { 284 | border-radius: 4px; 285 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 286 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 287 | } 288 | .list-group-item.active, 289 | .list-group-item.active:hover, 290 | .list-group-item.active:focus { 291 | text-shadow: 0 -1px 0 #3071a9; 292 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); 293 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); 294 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); 295 | background-repeat: repeat-x; 296 | border-color: #3278b3; 297 | } 298 | .panel { 299 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 300 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 301 | } 302 | .panel-default > .panel-heading { 303 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 304 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 305 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 306 | background-repeat: repeat-x; 307 | } 308 | .panel-primary > .panel-heading { 309 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 310 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 311 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 312 | background-repeat: repeat-x; 313 | } 314 | .panel-success > .panel-heading { 315 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 316 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 317 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 318 | background-repeat: repeat-x; 319 | } 320 | .panel-info > .panel-heading { 321 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 322 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 323 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 324 | background-repeat: repeat-x; 325 | } 326 | .panel-warning > .panel-heading { 327 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 328 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 329 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 330 | background-repeat: repeat-x; 331 | } 332 | .panel-danger > .panel-heading { 333 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 334 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .well { 339 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 340 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 341 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 342 | background-repeat: repeat-x; 343 | border-color: #dcdcdc; 344 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 345 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 346 | } 347 | /*# sourceMappingURL=bootstrap-theme.css.map */ 348 | -------------------------------------------------------------------------------- /Server/css/isotope.css: -------------------------------------------------------------------------------- 1 | /* Start: Recommended Isotope styles */ 2 | 3 | /**** Isotope Filtering ****/ 4 | 5 | .isotope-item { 6 | z-index: 2; 7 | } 8 | 9 | .isotope-hidden.isotope-item { 10 | pointer-events: none; 11 | z-index: 1; 12 | } 13 | 14 | /**** Isotope CSS3 transitions ****/ 15 | 16 | .isotope, 17 | .isotope .isotope-item { 18 | -webkit-transition-duration: 0.8s; 19 | -moz-transition-duration: 0.8s; 20 | -ms-transition-duration: 0.8s; 21 | -o-transition-duration: 0.8s; 22 | transition-duration: 0.8s; 23 | } 24 | 25 | .isotope { 26 | -webkit-transition-property: height, width; 27 | -moz-transition-property: height, width; 28 | -ms-transition-property: height, width; 29 | -o-transition-property: height, width; 30 | transition-property: height, width; 31 | } 32 | 33 | .isotope .isotope-item { 34 | -webkit-transition-property: -webkit-transform, opacity; 35 | -moz-transition-property: -moz-transform, opacity; 36 | -ms-transition-property: -ms-transform, opacity; 37 | -o-transition-property: top, left, opacity; 38 | transition-property: transform, opacity; 39 | } 40 | 41 | /**** disabling Isotope CSS3 transitions ****/ 42 | 43 | .isotope.no-transition, 44 | .isotope.no-transition .isotope-item, 45 | .isotope .isotope-item.no-transition { 46 | -webkit-transition-duration: 0s; 47 | -moz-transition-duration: 0s; 48 | -ms-transition-duration: 0s; 49 | -o-transition-duration: 0s; 50 | transition-duration: 0s; 51 | } 52 | 53 | /* End: Recommended Isotope styles */ 54 | 55 | 56 | 57 | /* disable CSS transitions for containers with infinite scrolling*/ 58 | .isotope.infinite-scrolling { 59 | -webkit-transition: none; 60 | -moz-transition: none; 61 | -ms-transition: none; 62 | -o-transition: none; 63 | transition: none; 64 | } 65 | 66 | 67 | 68 | /**** Isotope styles ****/ 69 | 70 | /* required for containers to inherit vertical size from window */ 71 | /*html, 72 | body { 73 | height: 100%; 74 | }*/ 75 | 76 | #container { 77 | border: 1px solid #666; 78 | padding: 5px; 79 | margin-bottom: 20px; 80 | } 81 | 82 | .element { 83 | width: 110px; 84 | height: 110px; 85 | margin: 5px; 86 | float: left; 87 | overflow: hidden; 88 | position: relative; 89 | background: #888; 90 | color: #222; 91 | -webkit-border-top-right-radius: 1.2em; 92 | -moz-border-radius-topright: 1.2em; 93 | border-top-right-radius: 1.2em; 94 | } 95 | 96 | .element.alkali { background: #F00; background: hsl( 0, 100%, 50%); } 97 | .element.alkaline-earth { background: #F80; background: hsl( 36, 100%, 50%); } 98 | .element.lanthanoid { background: #FF0; background: hsl( 72, 100%, 50%); } 99 | .element.actinoid { background: #0F0; background: hsl( 108, 100%, 50%); } 100 | .element.transition { background: #0F8; background: hsl( 144, 100%, 50%); } 101 | .element.post-transition { background: #0FF; background: hsl( 180, 100%, 50%); } 102 | .element.metalloid { background: #08F; background: hsl( 216, 100%, 50%); } 103 | .element.other.nonmetal { background: #00F; background: hsl( 252, 100%, 50%); } 104 | .element.halogen { background: #F0F; background: hsl( 288, 100%, 50%); } 105 | .element.noble-gas { background: #F08; background: hsl( 324, 100%, 50%); } 106 | 107 | 108 | .element * { 109 | position: absolute; 110 | margin: 0; 111 | } 112 | 113 | .element .symbol { 114 | left: 0.2em; 115 | top: 0.4em; 116 | font-size: 3.8em; 117 | line-height: 1.0em; 118 | color: #FFF; 119 | } 120 | .element.large .symbol { 121 | font-size: 4.5em; 122 | } 123 | 124 | .element.fake .symbol { 125 | color: #000; 126 | } 127 | 128 | .element .name { 129 | left: 0.5em; 130 | bottom: 1.6em; 131 | font-size: 1.05em; 132 | } 133 | 134 | .element .weight { 135 | font-size: 0.9em; 136 | left: 0.5em; 137 | bottom: 0.5em; 138 | } 139 | 140 | .element .number { 141 | font-size: 1.25em; 142 | font-weight: bold; 143 | color: hsla(0,0%,0%,.5); 144 | right: 0.5em; 145 | top: 0.5em; 146 | } 147 | 148 | .variable-sizes .element.width2 { width: 230px; } 149 | 150 | .variable-sizes .element.height2 { height: 230px; } 151 | 152 | .variable-sizes .element.width2.height2 { 153 | font-size: 2.0em; 154 | } 155 | 156 | .element.large, 157 | .variable-sizes .element.large, 158 | .variable-sizes .element.large.width2.height2 { 159 | font-size: 3.0em; 160 | width: 350px; 161 | height: 350px; 162 | z-index: 100; 163 | } 164 | 165 | .clickable .element:hover { 166 | cursor: pointer; 167 | } 168 | 169 | .clickable .element:hover h3 { 170 | text-shadow: 171 | 0 0 10px white, 172 | 0 0 10px white 173 | ; 174 | } 175 | 176 | .clickable .element:hover h2 { 177 | color: white; 178 | } 179 | 180 | -------------------------------------------------------------------------------- /Server/css/overwrite.css: -------------------------------------------------------------------------------- 1 | select, 2 | textarea, 3 | input[type="text"], 4 | input[type="password"], 5 | input[type="datetime"], 6 | input[type="datetime-local"], 7 | input[type="date"], 8 | input[type="month"], 9 | input[type="time"], 10 | input[type="week"], 11 | input[type="number"], 12 | input[type="email"], 13 | input[type="url"], 14 | input[type="search"], 15 | input[type="tel"], 16 | input[type="color"], 17 | .uneditable-input { 18 | -webkit-border-radius: 0; 19 | -moz-border-radius: 0; 20 | border-radius: 0; 21 | } 22 | 23 | 24 | input.input-block-level{ 25 | padding:20px; 26 | } 27 | 28 | .input-append input, 29 | .input-prepend input, 30 | .input-append select, 31 | .input-prepend select, 32 | .input-append .uneditable-input, 33 | .input-prepend .uneditable-input { 34 | -webkit-border-radius: 0 0 0 0; 35 | -moz-border-radius: 0 0 0 0; 36 | border-radius: 0 0 0 0; 37 | } 38 | 39 | .input-prepend .add-on:first-child, 40 | .input-prepend .btn:first-child { 41 | -webkit-border-radius: 0 0 0 0; 42 | -moz-border-radius: 0 0 0 0; 43 | border-radius: 0 0 0 0; 44 | } 45 | 46 | .input-append input, 47 | .input-append select, 48 | .input-append .uneditable-input { 49 | -webkit-border-radius: 0 0 0 0; 50 | -moz-border-radius: 0 0 0 0; 51 | border-radius: 0 0 0 0; 52 | } 53 | 54 | .input-append input + .btn-group .btn:last-child, 55 | .input-append select + .btn-group .btn:last-child, 56 | .input-append .uneditable-input + .btn-group .btn:last-child { 57 | -webkit-border-radius: 0 0 0 0; 58 | -moz-border-radius: 0 0 0 0; 59 | border-radius: 0 0 0 0; 60 | } 61 | 62 | 63 | .input-append .add-on:last-child, 64 | .input-append .btn:last-child, 65 | .input-append .btn-group:last-child > .dropdown-toggle { 66 | -webkit-border-radius: 0 0 0 0; 67 | -moz-border-radius: 0 0 0 0; 68 | border-radius: 0 0 0 0; 69 | } 70 | 71 | .input-prepend.input-append input, 72 | .input-prepend.input-append select, 73 | .input-prepend.input-append .uneditable-input { 74 | -webkit-border-radius: 0; 75 | -moz-border-radius: 0; 76 | border-radius: 0; 77 | } 78 | 79 | .input-prepend.input-append input + .btn-group .btn, 80 | .input-prepend.input-append select + .btn-group .btn, 81 | .input-prepend.input-append .uneditable-input + .btn-group .btn { 82 | -webkit-border-radius: 0 0 0 0; 83 | -moz-border-radius: 0 0 0 0; 84 | border-radius: 0 0 0 0; 85 | } 86 | 87 | .input-prepend.input-append .add-on:first-child, 88 | .input-prepend.input-append .btn:first-child { 89 | margin-right: -1px; 90 | -webkit-border-radius: 0 0 0 0; 91 | -moz-border-radius: 0 0 0 0; 92 | border-radius: 0 0 0 0; 93 | } 94 | 95 | .input-prepend.input-append .add-on:last-child, 96 | .input-prepend.input-append .btn:last-child { 97 | margin-left: -1px; 98 | -webkit-border-radius: 0 0 0 0; 99 | -moz-border-radius: 0 0 0 0; 100 | border-radius: 0 0 0 0; 101 | } 102 | 103 | textarea:focus, 104 | input[type="text"]:focus, 105 | input[type="password"]:focus, 106 | input[type="datetime"]:focus, 107 | input[type="datetime-local"]:focus, 108 | input[type="date"]:focus, 109 | input[type="month"]:focus, 110 | input[type="time"]:focus, 111 | input[type="week"]:focus, 112 | input[type="number"]:focus, 113 | input[type="email"]:focus, 114 | input[type="url"]:focus, 115 | input[type="search"]:focus, 116 | input[type="tel"]:focus, 117 | input[type="color"]:focus, 118 | .uneditable-input:focus { 119 | outline: 0; 120 | outline: thin dotted \9; 121 | /* IE6-9 */ 122 | 123 | } 124 | 125 | input.search-query { 126 | margin-bottom: 0; 127 | -webkit-border-radius: 0 0 0 0; 128 | -moz-border-radius: 0 0 0 0; 129 | border-radius: 0 0 0 0; 130 | } 131 | 132 | .form-search .input-append .search-query { 133 | -webkit-border-radius: 0 0 0 0; 134 | -moz-border-radius: 0 0 0 0; 135 | border-radius: 0 0 0 0; 136 | } 137 | 138 | .form-search .input-append .btn { 139 | -webkit-border-radius: 0 0 0 0; 140 | -moz-border-radius: 0 0 0 0; 141 | border-radius: 0 0 0 0; 142 | } 143 | 144 | .form-search .input-prepend .search-query { 145 | -webkit-border-radius: 0 0 0 0; 146 | -moz-border-radius: 0 0 0 0; 147 | border-radius: 0 0 0 0; 148 | } 149 | 150 | .form-search .input-prepend .btn { 151 | -webkit-border-radius: 0 0 0 0; 152 | -moz-border-radius: 0 0 0 0; 153 | border-radius: 0 0 0 0; 154 | } 155 | 156 | .table-bordered { 157 | -webkit-border-radius: 0 0 0 0; 158 | -moz-border-radius: 0 0 0 0; 159 | border-radius: 0 0 0 0; 160 | } 161 | 162 | 163 | .dropdown-menu { 164 | *border-right-width: 0; 165 | *border-bottom-width: 0; 166 | -webkit-border-radius: 0; 167 | -moz-border-radius: 0; 168 | border-radius: 0; 169 | 170 | } 171 | 172 | .dropdown-submenu > .dropdown-menu { 173 | -webkit-border-radius: 0 0 0 0; 174 | -moz-border-radius: 0 0 0 0; 175 | border-radius: 0 0 0 0; 176 | } 177 | 178 | .dropup .dropdown-submenu > .dropdown-menu { 179 | -webkit-border-radius: 0 0 0 0; 180 | -moz-border-radius: 0 0 0 0; 181 | border-radius: 0 0 0 0; 182 | } 183 | 184 | 185 | /* === bootstrap button === */ 186 | 187 | 188 | .btn { 189 | text-shadow: none; 190 | background-image:none; 191 | border-color: none; 192 | border-bottom-color: none; 193 | -webkit-box-shadow: none; 194 | -moz-box-shadow: none; 195 | box-shadow: none; 196 | } 197 | 198 | .btn { 199 | outline:0; 200 | -webkit-border-radius: 0; 201 | -moz-border-radius: 0; 202 | border-radius: 0; 203 | } 204 | 205 | 206 | a.btn,.btn:focus { 207 | outline:0; 208 | 209 | } 210 | 211 | .btn-medium { 212 | -webkit-border-radius: 0; 213 | -moz-border-radius: 0; 214 | border-radius: 0; 215 | } 216 | 217 | .btn-lg { 218 | -webkit-border-radius: 0; 219 | -moz-border-radius: 0; 220 | border-radius: 0; 221 | } 222 | 223 | .btn-sm { 224 | -webkit-border-radius: 0; 225 | -moz-border-radius: 0; 226 | border-radius: 0; 227 | } 228 | 229 | .btn-xs { 230 | -webkit-border-radius: 0; 231 | -moz-border-radius: 0; 232 | border-radius: 0; 233 | } 234 | 235 | 236 | .btn-default { 237 | color: #333333; 238 | background-color: #f8f8f8; 239 | } 240 | 241 | 242 | .btn-theme { 243 | color:#fff; 244 | } 245 | 246 | .btn-theme:hover,.btn-theme:focus,.btn-theme:active{ 247 | color:#fff; 248 | } 249 | 250 | 251 | -------------------------------------------------------------------------------- /Server/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoManTeam/Hole/2976bcb13716a4ccc8dba17ffae72cd29515d79d/Server/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /Server/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoManTeam/Hole/2976bcb13716a4ccc8dba17ffae72cd29515d79d/Server/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /Server/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoManTeam/Hole/2976bcb13716a4ccc8dba17ffae72cd29515d79d/Server/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /Server/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NoManTeam/Hole/2976bcb13716a4ccc8dba17ffae72cd29515d79d/Server/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /Server/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Nothing found for Demo Starallax Starallax Fonts Glyphicons-halflings-regular Eot 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 126 | 127 | 128 | 129 | 132 | 137 | 140 | 141 | 148 | 151 | 152 | 153 | 154 | 155 | 156 |
157 | 186 |
187 |
188 |
189 |
190 |
191 | 192 | 193 | 194 |

Urban Stories

195 |
196 |
Urban Stories
197 |
198 |
199 |
200 |
201 | 202 | 2 | 3 | 4 | 5 | Nothing found for Demo Starallax Starallax Fonts Glyphicons-halflings-regular Eot? 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 126 | 127 | 128 | 129 | 132 | 137 | 140 | 141 | 148 | 151 | 152 | 153 | 154 | 155 | 156 |
157 | 186 |
187 |
188 |
189 |
190 |
191 | 192 | 193 | 194 |

Urban Stories

195 |
196 |
Urban Stories
197 |
198 |
199 |
200 |
201 | 202 | 2 | 3 | 4 | 5 | Nothing found for Demo Starallax Starallax Fonts Glyphicons-halflings-regular Svg 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 126 | 127 | 128 | 129 | 132 | 137 | 140 | 141 | 148 | 151 | 152 | 153 | 154 | 155 | 156 |
157 | 186 |
187 |
188 |
189 |
190 |
191 | 192 | 193 | 194 |

Urban Stories

195 |
196 |
Urban Stories
197 |
198 |
199 |
200 |
201 | 202 | 2 | 3 | 4 | 5 | Nothing found for Demo Starallax Starallax Fonts Glyphicons-halflings-regular Ttf 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 126 | 127 | 128 | 129 | 132 | 137 | 140 | 141 | 148 | 151 | 152 | 153 | 154 | 155 | 156 |
157 | 186 |
187 |
188 |
189 |
190 |
191 | 192 | 193 | 194 |

Urban Stories

195 |
196 |
Urban Stories
197 |
198 |
199 |
200 |
201 | 202 | 2 | 3 | 4 | 5 | Nothing found for Demo Starallax Starallax Fonts Glyphicons-halflings-regular Woff 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 126 | 127 | 128 | 129 | 132 | 137 | 140 | 141 | 148 | 151 | 152 | 153 | 154 | 155 | 156 |
157 | 186 |
187 |
188 |
189 |
190 |
191 | 192 | 193 | 194 |

Urban Stories

195 |
196 |
Urban Stories
197 |
198 |
199 |
200 |
201 | 202 | = window_top && 55 | top - ($element.data('appear-top-offset') || 0) <= window_top + $window.height() && 56 | left + $element.width() >= window_left && 57 | left - ($element.data('appear-left-offset') || 0) <= window_left + $window.width()) { 58 | return true; 59 | } else { 60 | return false; 61 | } 62 | } 63 | 64 | $.fn.extend({ 65 | // watching for element's appearance in browser viewport 66 | appear: function(options) { 67 | var opts = $.extend({}, defaults, options || {}); 68 | var selector = this.selector || this; 69 | if (!check_binded) { 70 | var on_check = function() { 71 | if (check_lock) { 72 | return; 73 | } 74 | check_lock = true; 75 | 76 | setTimeout(process, opts.interval); 77 | }; 78 | 79 | $(window).scroll(on_check).resize(on_check); 80 | check_binded = true; 81 | } 82 | 83 | if (opts.force_process) { 84 | setTimeout(process, opts.interval); 85 | } 86 | selectors.push(selector); 87 | return $(selector); 88 | } 89 | }); 90 | 91 | $.extend({ 92 | // force elements's appearance check 93 | force_appear: function() { 94 | if (check_binded) { 95 | process(); 96 | return true; 97 | }; 98 | return false; 99 | } 100 | }); 101 | })(jQuery); 102 | -------------------------------------------------------------------------------- /Server/js/jquery.easing.1.3.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 3 | * 4 | * Uses the built in easing capabilities added In jQuery 1.1 5 | * to offer multiple easing options 6 | * 7 | * TERMS OF USE - jQuery Easing 8 | * 9 | * Open source under the BSD License. 10 | * 11 | * Copyright © 2008 George McGinley Smith 12 | * All rights reserved. 13 | * 14 | * Redistribution and use in source and binary forms, with or without modification, 15 | * are permitted provided that the following conditions are met: 16 | * 17 | * Redistributions of source code must retain the above copyright notice, this list of 18 | * conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright notice, this list 20 | * of conditions and the following disclaimer in the documentation and/or other materials 21 | * provided with the distribution. 22 | * 23 | * Neither the name of the author nor the names of contributors may be used to endorse 24 | * or promote products derived from this software without specific prior written permission. 25 | * 26 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 27 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 28 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 29 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 30 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 31 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 32 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 33 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 34 | * OF THE POSSIBILITY OF SUCH DAMAGE. 35 | * 36 | */ 37 | 38 | // t: current time, b: begInnIng value, c: change In value, d: duration 39 | jQuery.easing['jswing'] = jQuery.easing['swing']; 40 | 41 | jQuery.extend( jQuery.easing, 42 | { 43 | def: 'easeOutQuad', 44 | swing: function (x, t, b, c, d) { 45 | //alert(jQuery.easing.default); 46 | return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 47 | }, 48 | easeInQuad: function (x, t, b, c, d) { 49 | return c*(t/=d)*t + b; 50 | }, 51 | easeOutQuad: function (x, t, b, c, d) { 52 | return -c *(t/=d)*(t-2) + b; 53 | }, 54 | easeInOutQuad: function (x, t, b, c, d) { 55 | if ((t/=d/2) < 1) return c/2*t*t + b; 56 | return -c/2 * ((--t)*(t-2) - 1) + b; 57 | }, 58 | easeInCubic: function (x, t, b, c, d) { 59 | return c*(t/=d)*t*t + b; 60 | }, 61 | easeOutCubic: function (x, t, b, c, d) { 62 | return c*((t=t/d-1)*t*t + 1) + b; 63 | }, 64 | easeInOutCubic: function (x, t, b, c, d) { 65 | if ((t/=d/2) < 1) return c/2*t*t*t + b; 66 | return c/2*((t-=2)*t*t + 2) + b; 67 | }, 68 | easeInQuart: function (x, t, b, c, d) { 69 | return c*(t/=d)*t*t*t + b; 70 | }, 71 | easeOutQuart: function (x, t, b, c, d) { 72 | return -c * ((t=t/d-1)*t*t*t - 1) + b; 73 | }, 74 | easeInOutQuart: function (x, t, b, c, d) { 75 | if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 76 | return -c/2 * ((t-=2)*t*t*t - 2) + b; 77 | }, 78 | easeInQuint: function (x, t, b, c, d) { 79 | return c*(t/=d)*t*t*t*t + b; 80 | }, 81 | easeOutQuint: function (x, t, b, c, d) { 82 | return c*((t=t/d-1)*t*t*t*t + 1) + b; 83 | }, 84 | easeInOutQuint: function (x, t, b, c, d) { 85 | if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 86 | return c/2*((t-=2)*t*t*t*t + 2) + b; 87 | }, 88 | easeInSine: function (x, t, b, c, d) { 89 | return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 90 | }, 91 | easeOutSine: function (x, t, b, c, d) { 92 | return c * Math.sin(t/d * (Math.PI/2)) + b; 93 | }, 94 | easeInOutSine: function (x, t, b, c, d) { 95 | return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 96 | }, 97 | easeInExpo: function (x, t, b, c, d) { 98 | return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 99 | }, 100 | easeOutExpo: function (x, t, b, c, d) { 101 | return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 102 | }, 103 | easeInOutExpo: function (x, t, b, c, d) { 104 | if (t==0) return b; 105 | if (t==d) return b+c; 106 | if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 107 | return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 108 | }, 109 | easeInCirc: function (x, t, b, c, d) { 110 | return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 111 | }, 112 | easeOutCirc: function (x, t, b, c, d) { 113 | return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 114 | }, 115 | easeInOutCirc: function (x, t, b, c, d) { 116 | if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 117 | return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 118 | }, 119 | easeInElastic: function (x, t, b, c, d) { 120 | var s=1.70158;var p=0;var a=c; 121 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 122 | if (a < Math.abs(c)) { a=c; var s=p/4; } 123 | else var s = p/(2*Math.PI) * Math.asin (c/a); 124 | return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 125 | }, 126 | easeOutElastic: function (x, t, b, c, d) { 127 | var s=1.70158;var p=0;var a=c; 128 | if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 129 | if (a < Math.abs(c)) { a=c; var s=p/4; } 130 | else var s = p/(2*Math.PI) * Math.asin (c/a); 131 | return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 132 | }, 133 | easeInOutElastic: function (x, t, b, c, d) { 134 | var s=1.70158;var p=0;var a=c; 135 | if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 136 | if (a < Math.abs(c)) { a=c; var s=p/4; } 137 | else var s = p/(2*Math.PI) * Math.asin (c/a); 138 | if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 139 | return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 140 | }, 141 | easeInBack: function (x, t, b, c, d, s) { 142 | if (s == undefined) s = 1.70158; 143 | return c*(t/=d)*t*((s+1)*t - s) + b; 144 | }, 145 | easeOutBack: function (x, t, b, c, d, s) { 146 | if (s == undefined) s = 1.70158; 147 | return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 148 | }, 149 | easeInOutBack: function (x, t, b, c, d, s) { 150 | if (s == undefined) s = 1.70158; 151 | if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 152 | return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 153 | }, 154 | easeInBounce: function (x, t, b, c, d) { 155 | return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 156 | }, 157 | easeOutBounce: function (x, t, b, c, d) { 158 | if ((t/=d) < (1/2.75)) { 159 | return c*(7.5625*t*t) + b; 160 | } else if (t < (2/2.75)) { 161 | return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 162 | } else if (t < (2.5/2.75)) { 163 | return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 164 | } else { 165 | return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 166 | } 167 | }, 168 | easeInOutBounce: function (x, t, b, c, d) { 169 | if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 170 | return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 171 | } 172 | }); 173 | 174 | /* 175 | * 176 | * TERMS OF USE - EASING EQUATIONS 177 | * 178 | * Open source under the BSD License. 179 | * 180 | * Copyright © 2001 Robert Penner 181 | * All rights reserved. 182 | * 183 | * Redistribution and use in source and binary forms, with or without modification, 184 | * are permitted provided that the following conditions are met: 185 | * 186 | * Redistributions of source code must retain the above copyright notice, this list of 187 | * conditions and the following disclaimer. 188 | * Redistributions in binary form must reproduce the above copyright notice, this list 189 | * of conditions and the following disclaimer in the documentation and/or other materials 190 | * provided with the distribution. 191 | * 192 | * Neither the name of the author nor the names of contributors may be used to endorse 193 | * or promote products derived from this software without specific prior written permission. 194 | * 195 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 196 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 197 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 198 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 199 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 200 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 201 | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 202 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 203 | * OF THE POSSIBILITY OF SUCH DAMAGE. 204 | * 205 | */ -------------------------------------------------------------------------------- /Server/js/jquery.isotope.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Isotope v1.5.25 3 | * An exquisite jQuery plugin for magical layouts 4 | * http://isotope.metafizzy.co 5 | * 6 | * Commercial use requires one-time purchase of a commercial license 7 | * http://isotope.metafizzy.co/docs/license.html 8 | * 9 | * Non-commercial use is licensed under the MIT License 10 | * 11 | * Copyright 2013 Metafizzy 12 | */ 13 | (function(a,b,c){"use strict";var d=a.document,e=a.Modernizr,f=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},g="Moz Webkit O Ms".split(" "),h=function(a){var b=d.documentElement.style,c;if(typeof b[a]=="string")return a;a=f(a);for(var e=0,h=g.length;e"+d+"{#modernizr{height:3px}}"+"").appendTo("head"),f=b('
').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd otransitionend",transitionProperty:"transitionend"}[j],r=h("transitionDuration"));var s=b.event,t=b.event.handle?"handle":"dispatch",u;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",u&&clearTimeout(u),u=setTimeout(function(){s[t].apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var v=["width","height"],w=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},containerStyle:{position:"relative",overflow:"hidden"},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!0,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};var d=v.slice(0);for(var e in this.options.containerStyle)d.push(e);for(var f=0,g=d.length;fg?1:f0&&(i=function(a,b){b.$el[d](b.style,f).one(q,k)},j=!1)}}b.each(this.styleQueue,i),j&&k(),this.styleQueue=[]},resize:function(){this["_"+this.options.layoutMode+"ResizeChanged"]()&&this.reLayout()},reLayout:function(a){this["_"+this.options.layoutMode+"Reset"](),this.layout(this.$filteredAtoms,a)},addItems:function(a,b){var c=this._getAtoms(a);this.$allAtoms=this.$allAtoms.add(c),b&&b(c)},insert:function(a,b){this.element.append(a);var c=this;this.addItems(a,function(a){var d=c._filter(a);c._addHideAppended(d),c._sort(),c.reLayout(),c._revealAppended(d,b)})},appended:function(a,b){var c=this;this.addItems(a,function(a){c._addHideAppended(a),c.layout(a),c._revealAppended(a,b)})},_addHideAppended:function(a){this.$filteredAtoms=this.$filteredAtoms.add(a),a.addClass("no-transition"),this._isInserting=!0,this.styleQueue.push({$el:a,style:this.options.hiddenStyle})},_revealAppended:function(a,b){var c=this;setTimeout(function(){a.removeClass("no-transition"),c.styleQueue.push({$el:a,style:c.options.visibleStyle}),c._isInserting=!1,c._processStyleQueue(a,b)},10)},reloadItems:function(){this.$allAtoms=this._getAtoms(this.element.children())},remove:function(a,b){this.$allAtoms=this.$allAtoms.not(a),this.$filteredAtoms=this.$filteredAtoms.not(a);var c=this,d=function(){a.remove(),b&&b.call(c.element)};a.filter(":not(."+this.options.hiddenClass+")").length?(this.styleQueue.push({$el:a,style:this.options.hiddenStyle}),this._sort(),this.reLayout(d)):d()},shuffle:function(a){this.updateSortData(this.$allAtoms),this.options.sortBy="random",this._sort(),this.reLayout(a)},destroy:function(){var a=this.usingTransforms,b=this.options;this.$allAtoms.removeClass(b.hiddenClass+" "+b.itemClass).each(function(){var b=this.style;b.position="",b.top="",b.left="",b.opacity="",a&&(b[i]="")});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".isotope").undelegate("."+b.hiddenClass,"click").removeClass(b.containerClass).removeData("isotope"),w.unbind(".isotope")},_getSegments:function(a){var b=this.options.layoutMode,c=a?"rowHeight":"columnWidth",d=a?"height":"width",e=a?"rows":"cols",g=this.element[d](),h,i=this.options[b]&&this.options[b][c]||this.$filteredAtoms["outer"+f(d)](!0)||g;h=Math.floor(g/i),h=Math.max(h,1),this[b][e]=h,this[b][c]=i},_checkIfSegmentsChanged:function(a){var b=this.options.layoutMode,c=a?"rows":"cols",d=this[b][c];return this._getSegments(a),this[b][c]!==d},_masonryReset:function(){this.masonry={},this._getSegments();var a=this.masonry.cols;this.masonry.colYs=[];while(a--)this.masonry.colYs.push(0)},_masonryLayout:function(a){var c=this,d=c.masonry;a.each(function(){var a=b(this),e=Math.ceil(a.outerWidth(!0)/d.columnWidth);e=Math.min(e,d.cols);if(e===1)c._masonryPlaceBrick(a,d.colYs);else{var f=d.cols+1-e,g=[],h,i;for(i=0;id&&(e.x=0,e.y=e.height),c._pushPosition(a,e.x,e.y),e.height=Math.max(e.y+g,e.height),e.x+=f})},_fitRowsGetContainerSize:function(){return{height:this.fitRows.height}},_fitRowsResizeChanged:function(){return!0},_cellsByRowReset:function(){this.cellsByRow={index:0},this._getSegments(),this._getSegments(!0)},_cellsByRowLayout:function(a){var c=this,d=this.cellsByRow;a.each(function(){var a=b(this),e=d.index%d.cols,f=Math.floor(d.index/d.cols),g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByRowGetContainerSize:function(){return{height:Math.ceil(this.$filteredAtoms.length/this.cellsByRow.cols)*this.cellsByRow.rowHeight+this.offset.top}},_cellsByRowResizeChanged:function(){return this._checkIfSegmentsChanged()},_straightDownReset:function(){this.straightDown={y:0}},_straightDownLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,0,c.straightDown.y),c.straightDown.y+=d.outerHeight(!0)})},_straightDownGetContainerSize:function(){return{height:this.straightDown.y}},_straightDownResizeChanged:function(){return!0},_masonryHorizontalReset:function(){this.masonryHorizontal={},this._getSegments(!0);var a=this.masonryHorizontal.rows;this.masonryHorizontal.rowXs=[];while(a--)this.masonryHorizontal.rowXs.push(0)},_masonryHorizontalLayout:function(a){var c=this,d=c.masonryHorizontal;a.each(function(){var a=b(this),e=Math.ceil(a.outerHeight(!0)/d.rowHeight);e=Math.min(e,d.rows);if(e===1)c._masonryHorizontalPlaceBrick(a,d.rowXs);else{var f=d.rows+1-e,g=[],h,i;for(i=0;id&&(e.x=e.width,e.y=0),c._pushPosition(a,e.x,e.y),e.width=Math.max(e.x+f,e.width),e.y+=g})},_fitColumnsGetContainerSize:function(){return{width:this.fitColumns.width}},_fitColumnsResizeChanged:function(){return!0},_cellsByColumnReset:function(){this.cellsByColumn={index:0},this._getSegments(),this._getSegments(!0)},_cellsByColumnLayout:function(a){var c=this,d=this.cellsByColumn;a.each(function(){var a=b(this),e=Math.floor(d.index/d.rows),f=d.index%d.rows,g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByColumnGetContainerSize:function(){return{width:Math.ceil(this.$filteredAtoms.length/this.cellsByColumn.rows)*this.cellsByColumn.columnWidth}},_cellsByColumnResizeChanged:function(){return this._checkIfSegmentsChanged(!0)},_straightAcrossReset:function(){this.straightAcross={x:0}},_straightAcrossLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,c.straightAcross.x,0),c.straightAcross.x+=d.outerWidth(!0)})},_straightAcrossGetContainerSize:function(){return{width:this.straightAcross.x}},_straightAcrossResizeChanged:function(){return!0}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var x=function(b){a.console&&a.console.error(b)};b.fn.isotope=function(a,c){if(typeof a=="string"){var d=Array.prototype.slice.call(arguments,1);this.each(function(){var c=b.data(this,"isotope");if(!c){x("cannot call methods on isotope prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(c[a])||a.charAt(0)==="_"){x("no such method '"+a+"' for isotope instance");return}c[a].apply(c,d)})}else this.each(function(){var d=b.data(this,"isotope");d?(d.option(a),d._init(c)):b.data(this,"isotope",new b.Isotope(a,this,c))});return this}})(window,jQuery); -------------------------------------------------------------------------------- /Server/js/jquery.localscroll-1.2.7-min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery.LocalScroll - Animated scrolling navigation, using anchors. 3 | * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com 4 | * Dual licensed under MIT and GPL. 5 | * Date: 3/11/2009 6 | * @author Ariel Flesler 7 | * @version 1.2.7 8 | **/ 9 | ;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$(' ').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery); -------------------------------------------------------------------------------- /Server/js/jquery.scrollTo-1.4.3.1-min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2007-2012 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com 3 | * Dual licensed under MIT and GPL. 4 | * @author Ariel Flesler 5 | * @version 1.4.3.1 6 | */ 7 | ;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); -------------------------------------------------------------------------------- /Server/js/main.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | 3 | $(window).scroll(function(){ 4 | if ($(this).scrollTop() > 100) { 5 | $('.scrollup').fadeIn(); 6 | } else { 7 | $('.scrollup').fadeOut(); 8 | } 9 | }); 10 | $('.scrollup').click(function(){ 11 | $("html, body").animate({ scrollTop: 0 }, 1000); 12 | return false; 13 | }); 14 | 15 | // local scroll 16 | jQuery('.navbar').localScroll({hash:true, offset: {top: 0},duration: 800, easing:'easeInOutExpo'}); 17 | 18 | 19 | // portfolio 20 | if($('.isotopeWrapper').length){ 21 | 22 | var $container = $('.isotopeWrapper'); 23 | var $resize = $('.isotopeWrapper').attr('id'); 24 | // initialize isotope 25 | 26 | $container.isotope({ 27 | itemSelector: '.isotopeItem', 28 | resizable: false, // disable normal resizing 29 | masonry: { 30 | columnWidth: $container.width() / $resize 31 | } 32 | 33 | 34 | 35 | }); 36 | 37 | $('#filter a').click(function(){ 38 | 39 | 40 | 41 | $('#filter a').removeClass('current'); 42 | $(this).addClass('current'); 43 | var selector = $(this).attr('data-filter'); 44 | $container.isotope({ 45 | filter: selector, 46 | animationOptions: { 47 | duration: 1000, 48 | easing: 'easeOutQuart', 49 | queue: false 50 | } 51 | }); 52 | return false; 53 | }); 54 | 55 | 56 | $(window).smartresize(function(){ 57 | $container.isotope({ 58 | // update columnWidth to a percentage of container width 59 | masonry: { 60 | columnWidth: $container.width() / $resize 61 | } 62 | }); 63 | }); 64 | 65 | 66 | } 67 | 68 | 69 | // fancybox 70 | jQuery(".fancybox").fancybox(); 71 | 72 | 73 | if (Modernizr.mq("screen and (max-width:1024px)")) { 74 | jQuery("body").toggleClass("body"); 75 | 76 | } else { 77 | var s = skrollr.init({ 78 | mobileDeceleration: 1, 79 | edgeStrategy: 'set', 80 | forceHeight: true, 81 | smoothScrolling: true, 82 | smoothScrollingDuration: 300, 83 | easing: { 84 | WTF: Math.random, 85 | inverted: function(p) { 86 | return 1-p; 87 | } 88 | } 89 | }); 90 | } 91 | 92 | 93 | 94 | //scroll menu 95 | jQuery('.appear').appear(); 96 | jQuery(".appear").on("appear", function(data) { 97 | var id = $(this).attr("id"); 98 | jQuery('.nav li').removeClass('active'); 99 | jQuery(".nav a[href='#" + id + "']").parent().addClass("active"); 100 | }); 101 | 102 | 103 | //parallax 104 | var isMobile = false; 105 | 106 | if(Modernizr.mq('only all and (max-width: 1024px)') ) { 107 | isMobile = true; 108 | } 109 | 110 | 111 | if (isMobile == false && ($('#parallax1').length ||isMobile == false && $('#parallax2').length ||isMobile == false && $('#testimonials').length)) 112 | { 113 | 114 | 115 | $(window).stellar({ 116 | responsive:true, 117 | scrollProperty: 'scroll', 118 | parallaxElements: false, 119 | horizontalScrolling: false, 120 | horizontalOffset: 0, 121 | verticalOffset: 0 122 | }); 123 | 124 | } 125 | 126 | //nicescroll 127 | $("html").niceScroll({zindex:999,cursorborder:"",cursorborderradius:"2px",cursorcolor:"#191919",cursoropacitymin:.5}); 128 | function initNice() { 129 | if($(window).innerWidth() <= 960) { 130 | $('html').niceScroll().remove(); 131 | } else { 132 | $("html").niceScroll({zindex:999,cursorborder:"",cursorborderradius:"2px",cursorcolor:"#191919",cursoropacitymin:.5}); 133 | } 134 | } 135 | $(window).load(initNice); 136 | $(window).resize(initNice); 137 | 138 | })(jQuery); -------------------------------------------------------------------------------- /Server/js/modernizr-2.6.2-respond-1.1.0.min.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.6.2 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(../../../../https@/),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f #mq-test-1 { width: 42px; }';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document); 9 | 10 | /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 11 | (function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this); -------------------------------------------------------------------------------- /Server/js/skrollr.min.js: -------------------------------------------------------------------------------- 1 | /*! skrollr 0.6.13 (2013-09-29) | Alexander Prinzhorn - https://github.com/Prinzhorn/skrollr | Free to use under terms of MIT license */ 2 | (function(e,t,r){"use strict";function n(r){if(o=t.documentElement,a=t.body,M(),at=this,r=r||{},ft=r.constants||{},r.easing)for(var n in r.easing)j[n]=r.easing[n];ht=r.edgeStrategy||"set",st={beforerender:r.beforerender,render:r.render},ct=r.forceHeight!==!1,ct&&(Vt=r.scale||1),ut=r.mobileDeceleration||A,mt=r.smoothScrolling!==!1,gt=r.smoothScrollingDuration||E,dt={targetTop:at.getScrollTop()},_t=(r.mobileCheck||function(){return/Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i.test(navigator.userAgent||navigator.vendor||e.opera)})(),_t?(lt=t.getElementById("skrollr-body"),lt&&ot(),W(),xt(o,[y,S],[T])):xt(o,[y,b],[T]),at.refresh(),bt(e,"resize orientationchange",function(){var e=o.clientWidth,t=o.clientHeight;(t!==Lt||e!==It)&&(Lt=t,It=e,Bt=!0)});var i=R();return function l(){Z(),Tt=i(l)}(),at}var o,a,i=e.skrollr={get:function(){return at},init:function(e){return at||new n(e)},VERSION:"0.6.13"},l=Object.prototype.hasOwnProperty,s=e.Math,c=e.getComputedStyle,f="touchstart",u="touchmove",p="touchcancel",m="touchend",g="skrollable",d=g+"-before",v=g+"-between",h=g+"-after",y="skrollr",T="no-"+y,b=y+"-desktop",S=y+"-mobile",w="linear",k=1e3,A=.004,E=200,x="start",F="end",C="center",D="bottom",H="___skrollable_id",P=/^\s+|\s+$/g,V=/^data(?:-(_\w+))?(?:-?(-?\d*\.?\d+p?))?(?:-?(start|end|top|center|bottom))?(?:-?(top|center|bottom))?$/,z=/\s*([\w\-\[\]]+)\s*:\s*(.+?)\s*(?:;|$)/gi,O=/^([a-z\-]+)\[(\w+)\]$/,q=/-([a-z])/g,I=function(e,t){return t.toUpperCase()},L=/[\-+]?[\d]*\.?[\d]+/g,B=/\{\?\}/g,$=/rgba?\(\s*-?\d+\s*,\s*-?\d+\s*,\s*-?\d+/g,_=/[a-z\-]+-gradient/g,G="",N="",M=function(){var e=/^(?:O|Moz|webkit|ms)|(?:-(?:o|moz|webkit|ms)-)/;if(c){var t=c(a,null);for(var n in t)if(G=n.match(e)||+n==n&&t[n].match(e))break;if(!G)return G=N="",r;G=G[0],"-"===G.slice(0,1)?(N=G,G={"-webkit-":"webkit","-moz-":"Moz","-ms-":"ms","-o-":"O"}[G]):N="-"+G.toLowerCase()+"-"}},R=function(){var t=e.requestAnimationFrame||e[G.toLowerCase()+"RequestAnimationFrame"],r=Dt();return(_t||!t)&&(t=function(t){var n=Dt()-r,o=s.max(0,1e3/60-n);return e.setTimeout(function(){r=Dt(),t()},o)}),t},U=function(){var t=e.cancelAnimationFrame||e[G.toLowerCase()+"CancelAnimationFrame"];return(_t||!t)&&(t=function(t){return e.clearTimeout(t)}),t},j={begin:function(){return 0},end:function(){return 1},linear:function(e){return e},quadratic:function(e){return e*e},cubic:function(e){return e*e*e},swing:function(e){return-s.cos(e*s.PI)/2+.5},sqrt:function(e){return s.sqrt(e)},outCubic:function(e){return s.pow(e-1,3)+1},bounce:function(e){var t;if(.5083>=e)t=3;else if(.8489>=e)t=9;else if(.96208>=e)t=27;else{if(!(.99981>=e))return 1;t=91}return 1-s.abs(3*s.cos(1.028*e*t)/t)}};n.prototype.refresh=function(e){var n,o,a=!1;for(e===r?(a=!0,it=[],$t=0,e=t.getElementsByTagName("*")):e=[].concat(e),n=0,o=e.length;o>n;n++){var i=e[n],l=i,s=[],c=mt,f=ht;if(i.attributes){for(var u=0,p=i.attributes.length;p>u;u++){var m=i.attributes[u];if("data-anchor-target"!==m.name)if("data-smooth-scrolling"!==m.name)if("data-edge-strategy"!==m.name){var d=m.name.match(V);if(null!==d){var v={props:m.value,element:i};s.push(v);var h=d[1];h=h&&ft[h.substr(1)]||0;var y=d[2];/p$/.test(y)?(v.isPercentage=!0,v.offset=((0|y.slice(0,-1))+h)/100):v.offset=(0|y)+h;var T=d[3],b=d[4]||T;T&&T!==x&&T!==F?(v.mode="relative",v.anchors=[T,b]):(v.mode="absolute",T===F?v.isEnd=!0:v.isPercentage||(v.frame=v.offset*Vt,delete v.offset))}}else f=m.value;else c="off"!==m.value;else if(l=t.querySelector(m.value),null===l)throw'Unable to find anchor target "'+m.value+'"'}if(s.length){var S,w,k;!a&&H in i?(k=i[H],S=it[k].styleAttr,w=it[k].classAttr):(k=i[H]=$t++,S=i.style.cssText,w=Et(i)),it[k]={element:i,styleAttr:S,classAttr:w,anchorTarget:l,keyFrames:s,smoothScrolling:c,edgeStrategy:f},xt(i,[g],[])}}}for(kt(),n=0,o=e.length;o>n;n++){var A=it[e[n][H]];A!==r&&(J(A),Q(A))}return at},n.prototype.relativeToAbsolute=function(e,t,r){var n=o.clientHeight,a=e.getBoundingClientRect(),i=a.top,l=a.bottom-a.top;return t===D?i-=n:t===C&&(i-=n/2),r===D?i+=l:r===C&&(i+=l/2),i+=at.getScrollTop(),0|i+.5},n.prototype.animateTo=function(e,t){t=t||{};var n=Dt(),o=at.getScrollTop();return pt={startTop:o,topDiff:e-o,targetTop:e,duration:t.duration||k,startTime:n,endTime:n+(t.duration||k),easing:j[t.easing||w],done:t.done},pt.topDiff||(pt.done&&pt.done.call(at,!1),pt=r),at},n.prototype.stopAnimateTo=function(){pt&&pt.done&&pt.done.call(at,!0),pt=r},n.prototype.isAnimatingTo=function(){return!!pt},n.prototype.setScrollTop=function(t,r){return r===!0&&(Ot=t,vt=!0),_t?Gt=s.min(s.max(t,0),Pt):e.scrollTo(0,t),at},n.prototype.getScrollTop=function(){return _t?Gt:e.pageYOffset||o.scrollTop||a.scrollTop||0},n.prototype.on=function(e,t){return st[e]=t,at},n.prototype.off=function(e){return delete st[e],at},n.prototype.destroy=function(){var e=U();e(Tt),wt(),xt(o,[T],[y,b,S]);for(var t=0,n=it.length;n>t;t++)nt(it[t].element);o.style.overflow=a.style.overflow="auto",o.style.height=a.style.height="auto",lt&&i.setStyle(lt,"transform","none"),at=r,lt=r,st=r,ct=r,Pt=0,Vt=1,ft=r,ut=r,zt="down",Ot=-1,It=0,Lt=0,Bt=!1,pt=r,mt=r,gt=r,dt=r,vt=r,$t=0,ht=r,_t=!1,Gt=0,yt=r};var W=function(){var t,n,i,l,c,g,d,v,h,y,T;bt(o,[f,u,p,m].join(" "),function(e){e.preventDefault();var o=e.changedTouches[0];switch(l=o.clientY,c=o.clientX,h=e.timeStamp,e.type){case f:t&&t.blur(),at.stopAnimateTo(),t=e.target,n=g=l,i=c,v=h;break;case u:d=l-g,T=h-y,at.setScrollTop(Gt-d,!0),g=l,y=h;break;default:case p:case m:var a=n-l,b=i-c,S=b*b+a*a;if(49>S)return t.focus(),t.click(),r;t=r;var w=d/T;w=s.max(s.min(w,3),-3);var k=s.abs(w/ut),A=w*k+.5*ut*k*k,E=at.getScrollTop()-A,x=0;E>Pt?(x=(Pt-E)/A,E=Pt):0>E&&(x=-E/A,E=0),k*=1-x,at.animateTo(E,{easing:"outCubic",duration:k})}}),e.scrollTo(0,0),o.style.overflow=a.style.overflow="hidden"},Y=function(){var e,t,r,n,a,i,l,c,f;for(c=0,f=it.length;f>c;c++)for(e=it[c],t=e.element,r=e.anchorTarget,n=e.keyFrames,a=0,i=n.length;i>a;a++){l=n[a];var u=l.offset;l.isPercentage&&(u*=o.clientHeight,l.frame=u),"relative"===l.mode&&(nt(t),l.frame=at.relativeToAbsolute(r,l.anchors[0],l.anchors[1])-u,nt(t,!0)),ct&&!l.isEnd&&l.frame>Pt&&(Pt=l.frame)}for(Pt=s.max(Pt,At()),c=0,f=it.length;f>c;c++){for(e=it[c],n=e.keyFrames,a=0,i=n.length;i>a;a++)l=n[a],l.isEnd&&(l.frame=Pt-l.offset);e.keyFrames.sort(Ht)}},X=function(e,t){for(var r=0,n=it.length;n>r;r++){var o,a,s=it[r],c=s.element,f=s.smoothScrolling?e:t,u=s.keyFrames,p=u[0].frame,m=u[u.length-1].frame,y=p>f,T=f>m,b=u[y?0:u.length-1];if(y||T){if(y&&-1===s.edge||T&&1===s.edge)continue;switch(xt(c,[y?d:h],[d,v,h]),s.edge=y?-1:1,s.edgeStrategy){case"reset":nt(c);continue;case"ease":f=b.frame;break;default:case"set":var S=b.props;for(o in S)l.call(S,o)&&(a=rt(S[o].value),i.setStyle(c,o,a));continue}}else 0!==s.edge&&(xt(c,[g,v],[d,h]),s.edge=0);for(var w=0,k=u.length-1;k>w;w++)if(f>=u[w].frame&&u[w+1].frame>=f){var A=u[w],E=u[w+1];for(o in A.props)if(l.call(A.props,o)){var x=(f-A.frame)/(E.frame-A.frame);x=A.props[o].easing(x),a=tt(A.props[o].value,E.props[o].value,x),a=rt(a),i.setStyle(c,o,a)}break}}},Z=function(){Bt&&(Bt=!1,kt());var e,t,n=at.getScrollTop(),o=Dt();if(pt)o>=pt.endTime?(n=pt.targetTop,e=pt.done,pt=r):(t=pt.easing((o-pt.startTime)/pt.duration),n=0|pt.startTop+t*pt.topDiff),at.setScrollTop(n,!0);else if(!_t){var a=dt.targetTop-n;a&&(dt={startTop:Ot,topDiff:n-Ot,targetTop:n,startTime:qt,endTime:qt+gt}),dt.endTime>=o&&(t=j.sqrt((o-dt.startTime)/gt),n=0|dt.startTop+t*dt.topDiff)}if(_t&<&&i.setStyle(lt,"transform","translate(0, "+-Gt+"px) "+yt),vt||Ot!==n){zt=n>=Ot?"down":"up",vt=!1;var l={curTop:n,lastTop:Ot,maxTop:Pt,direction:zt},s=st.beforerender&&st.beforerender.call(at,l);s!==!1&&(X(n,at.getScrollTop()),Ot=n,st.render&&st.render.call(at,l)),e&&e.call(at,!1)}qt=o},J=function(e){for(var t=0,r=e.keyFrames.length;r>t;t++){for(var n,o,a,i,l=e.keyFrames[t],s={};null!==(i=z.exec(l.props));)a=i[1],o=i[2],n=a.match(O),null!==n?(a=n[1],n=n[2]):n=w,o=o.indexOf("!")?K(o):[o.slice(1)],s[a]={value:o,easing:j[n]};l.props=s}},K=function(e){var t=[];return $.lastIndex=0,e=e.replace($,function(e){return e.replace(L,function(e){return 100*(e/255)+"%"})}),N&&(_.lastIndex=0,e=e.replace(_,function(e){return N+e})),e=e.replace(L,function(e){return t.push(+e),"{?}"}),t.unshift(e),t},Q=function(e){var t,r,n={};for(t=0,r=e.keyFrames.length;r>t;t++)et(e.keyFrames[t],n);for(n={},t=e.keyFrames.length-1;t>=0;t--)et(e.keyFrames[t],n)},et=function(e,t){var r;for(r in t)l.call(e.props,r)||(e.props[r]=t[r]);for(r in e.props)t[r]=e.props[r]},tt=function(e,t,r){var n,o=e.length;if(o!==t.length)throw"Can't interpolate between \""+e[0]+'" and "'+t[0]+'"';var a=[e[0]];for(n=1;o>n;n++)a[n]=e[n]+(t[n]-e[n])*r;return a},rt=function(e){var t=1;return B.lastIndex=0,e[0].replace(B,function(){return e[t++]})},nt=function(e,t){e=[].concat(e);for(var r,n,o=0,a=e.length;a>o;o++)n=e[o],r=it[n[H]],r&&(t?(n.style.cssText=r.dirtyStyleAttr,xt(n,r.dirtyClassAttr)):(r.dirtyStyleAttr=n.style.cssText,r.dirtyClassAttr=Et(n),n.style.cssText=r.styleAttr,xt(n,r.classAttr)))},ot=function(){yt="translateZ(0)",i.setStyle(lt,"transform",yt);var e=c(lt),t=e.getPropertyValue("transform"),r=e.getPropertyValue(N+"transform"),n=t&&"none"!==t||r&&"none"!==r;n||(yt="")};i.setStyle=function(e,t,r){var n=e.style;if(t=t.replace(q,I).replace("-",""),"zIndex"===t)n[t]=""+(0|r);else if("float"===t)n.styleFloat=n.cssFloat=r;else try{G&&(n[G+t.slice(0,1).toUpperCase()+t.slice(1)]=r),n[t]=r}catch(o){}};var at,it,lt,st,ct,ft,ut,pt,mt,gt,dt,vt,ht,yt,Tt,bt=i.addEvent=function(t,r,n){var o=function(t){return t=t||e.event,t.target||(t.target=t.srcElement),t.preventDefault||(t.preventDefault=function(){t.returnValue=!1}),n.call(this,t)};r=r.split(" ");for(var a,i=0,l=r.length;l>i;i++)a=r[i],t.addEventListener?t.addEventListener(a,n,!1):t.attachEvent("on"+a,o),Nt.push({element:t,name:a,listener:n})},St=i.removeEvent=function(e,t,r){t=t.split(" ");for(var n=0,o=t.length;o>n;n++)e.removeEventListener?e.removeEventListener(t[n],r,!1):e.detachEvent("on"+t[n],r)},wt=function(){for(var e,t=0,r=Nt.length;r>t;t++)e=Nt[t],St(e.element,e.name,e.listener);Nt=[]},kt=function(){var e=at.getScrollTop();Pt=0,ct&&!_t&&(a.style.height="auto"),Y(),ct&&!_t&&(a.style.height=Pt+o.clientHeight+"px"),_t?at.setScrollTop(s.min(at.getScrollTop(),Pt)):at.setScrollTop(e,!0),vt=!0},At=function(){var e=lt&<.offsetHeight||0,t=s.max(e,a.scrollHeight,a.offsetHeight,o.scrollHeight,o.offsetHeight,o.clientHeight);return t-o.clientHeight},Et=function(t){var r="className";return e.SVGElement&&t instanceof e.SVGElement&&(t=t[r],r="baseVal"),t[r]},xt=function(t,n,o){var a="className";if(e.SVGElement&&t instanceof e.SVGElement&&(t=t[a],a="baseVal"),o===r)return t[a]=n,r;for(var i=t[a],l=0,s=o.length;s>l;l++)i=Ct(i).replace(Ct(o[l])," ");i=Ft(i);for(var c=0,f=n.length;f>c;c++)-1===Ct(i).indexOf(Ct(n[c]))&&(i+=" "+n[c]);t[a]=Ft(i)},Ft=function(e){return e.replace(P,"")},Ct=function(e){return" "+e+" "},Dt=Date.now||function(){return+new Date},Ht=function(e,t){return e.frame-t.frame},Pt=0,Vt=1,zt="down",Ot=-1,qt=Dt(),It=0,Lt=0,Bt=!1,$t=0,_t=!1,Gt=0,Nt=[]})(window,document); -------------------------------------------------------------------------------- /Server/js/validate.js: -------------------------------------------------------------------------------- 1 | /*global jQuery:false */ 2 | jQuery(document).ready(function($) { 3 | "use strict"; 4 | 5 | //Contact 6 | $('form.contactForm').submit(function(){ 7 | 8 | var f = $(this).find('.form-group'), 9 | ferror = false, 10 | emailExp = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i; 11 | 12 | f.children('input').each(function(){ // run all inputs 13 | 14 | var i = $(this); // current input 15 | var rule = i.attr('data-rule'); 16 | 17 | if( rule !== undefined ){ 18 | var ierror=false; // error flag for current input 19 | var pos = rule.indexOf( ':', 0 ); 20 | if( pos >= 0 ){ 21 | var exp = rule.substr( pos+1, rule.length ); 22 | rule = rule.substr(0, pos); 23 | }else{ 24 | rule = rule.substr( pos+1, rule.length ); 25 | } 26 | 27 | switch( rule ){ 28 | case 'required': 29 | if( i.val()==='' ){ ferror=ierror=true; } 30 | break; 31 | 32 | case 'maxlen': 33 | if( i.val().length= 0 ){ 61 | var exp = rule.substr( pos+1, rule.length ); 62 | rule = rule.substr(0, pos); 63 | }else{ 64 | rule = rule.substr( pos+1, rule.length ); 65 | } 66 | 67 | switch( rule ){ 68 | case 'required': 69 | if( i.val()==='' ){ ferror=ierror=true; } 70 | break; 71 | 72 | case 'maxlen': 73 | if( i.val().lengthli>a:hover { 14 | color: #79CDC0; 15 | } 16 | 17 | .navbar .navbar-nav > .active > a { 18 | color: #79CDC0; 19 | } 20 | 21 | /* flexslider */ 22 | .flex-control-paging li a { 23 | background: #35A49C; 24 | } 25 | 26 | .flex-direction-nav a:hover{ 27 | background-color:#35A49C; 28 | } 29 | 30 | .testimonial span.author a { 31 | color: #79CDC0; 32 | } 33 | 34 | /* --- icon box hover --- */ 35 | .hi-icon-effect-5 .hi-icon { 36 | color: #35A49C; 37 | box-shadow: 0 0 0 4px #35A49C; 38 | } 39 | .no-touch .hi-icon-effect-5 .hi-icon:hover { 40 | background: #35A49C; 41 | box-shadow: 0 0 0 8px #79CDC0; 42 | } 43 | 44 | 45 | /* portfolio */ 46 | .portfolio-item .portfolio-desc { 47 | background: #35A49C; 48 | } 49 | 50 | /* btn */ 51 | .btn-theme { 52 | background: #79CDC0; 53 | } 54 | .btn-theme:hover,.btn-theme:focus,.btn-theme:active{ 55 | background: #35A49C; 56 | } 57 | .btn-cta,.btn-cta.btn-lg { 58 | background: #35A49C; 59 | border-color: #79CDC0; 60 | } 61 | 62 | .btn-cta:focus,.btn-cta:active{ 63 | border-color: #35A49C; 64 | } 65 | 66 | /* contact */ 67 | .validation { 68 | color:#35A49C; 69 | } 70 | 71 | /* footer */ 72 | .social-circle li a { 73 | background:#35A49C; 74 | } 75 | 76 | a.scrollup{ 77 | background:#35A49C; 78 | } --------------------------------------------------------------------------------