mirror of
https://github.com/paboyle/Grid.git
synced 2026-04-23 03:56:13 +01:00
Compare commits
1486 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af855cc129 | |||
| a5314eddbb | |||
| 78ca15fdd8 | |||
| 47fe6b5a7c | |||
| b3ef09a54d | |||
| 8ed3940048 | |||
| 3ce10aa975 | |||
| a32a59fc43 | |||
| 200de272ed | |||
| d68a72e28b | |||
| ab45f029f4 | |||
| 17f9268a55 | |||
| 78f0c2595d | |||
| 26161addd0 | |||
| 93356fd246 | |||
| f35fc4b76c | |||
| ca42fe6d32 | |||
| b8a38f292d | |||
| 6b97b271ae | |||
| fa01ae5980 | |||
| 113131b01c | |||
| b2c02a6106 | |||
| 02d730513a | |||
| d875c2bd39 | |||
| cc32ba615a | |||
| 6684739452 | |||
| bc4b252883 | |||
| 11cf0f08f3 | |||
| fff0f00552 | |||
| 42e6055746 | |||
| 01231ce824 | |||
| ef84d54033 | |||
| 41e8038c56 | |||
| 8a33846095 | |||
| 54f04ee5c9 | |||
| 825875fd48 | |||
| f8290bfd58 | |||
| 967be91692 | |||
| d43034d3ac | |||
| 06f8ecea04 | |||
| af19118113 | |||
| e9ff25b06b | |||
| 05a7029600 | |||
| b04b8914fd | |||
| 7522e3f0dd | |||
| 1cc0d7b811 | |||
| 899ca41cb8 | |||
| d29b4c1dee | |||
| a2ff068e29 | |||
| b362f8d27b | |||
| 64770d9052 | |||
| 17af18dcab | |||
| 28022755ae | |||
| 98d8ba6d14 | |||
| 27813cf518 | |||
| 955b482aaf | |||
| f9b2fce93b | |||
| 473fa28a6c | |||
| 5d854c869c | |||
| 880ff88362 | |||
| f85b9ddd97 | |||
| 4690acc3c8 | |||
| 3281745fde | |||
| c2d96644a0 | |||
| 1159de165c | |||
| 16c7993434 | |||
| 6be9716e6f | |||
| 32762346ad | |||
| 4a41c885ed | |||
| 0f48658a27 | |||
| 757b31ed42 | |||
| 5aafdd7e1a | |||
| ac7d1f26ad | |||
| 1a8bf938b3 | |||
| 63a2993827 | |||
| 4e65ad21ac | |||
| dfc1de6f60 | |||
| f87526a04f | |||
| 3b7576ad53 | |||
| 9b5d31ffc1 | |||
| a38762159c | |||
| ffc5dab17f | |||
| 96608c70d1 | |||
| d35d63b171 | |||
| 9183920e8b | |||
| 01f286c9fe | |||
| 24044dbc56 | |||
| abb23df83f | |||
| 12c5ec813c | |||
| 1271508ca2 | |||
| ec5af35166 | |||
| b3d70a3bb2 | |||
| c26220e9ab | |||
| 0f59356e86 | |||
| 8709117aea | |||
| 1b22ce5720 | |||
| e6b9aa9076 | |||
| d9f2e2e06a | |||
| 41299da406 | |||
| 8889af45ca | |||
| d4289a33b8 | |||
| 83afb2e26a | |||
| 3726fe7481 | |||
| 6d06bd9493 | |||
| 6ee23f409e | |||
| 2d95dac6b6 | |||
| 44fecd4d8d | |||
| 814c79f38d | |||
| 1878bf97d0 | |||
| 3a478e5f2a | |||
| a660ce716b | |||
| f4b6d1dfea | |||
| 23813ac798 | |||
| af89c40462 | |||
| 9f4f65cb46 | |||
| 64d64d1ab6 | |||
| 5ef42add2d | |||
| 2f38ebc446 | |||
| 638d6675ee | |||
| 357c6ab46d | |||
| 755dca9533 | |||
| 29fd004d54 | |||
| eed889ea05 | |||
| aa52fdadcc | |||
| 76d752585b | |||
| dc814f30da | |||
| 612957f057 | |||
| cea8ac9a22 | |||
| 476da3ee62 | |||
| 35818fdf6c | |||
| 091785e5f5 | |||
| 77d299b414 | |||
| ab81a25073 | |||
| dd498f993e | |||
| fdfe194c41 | |||
| 8b070ae54c | |||
| 4e085dd0ed | |||
| e8d63c9178 | |||
| c54c086f17 | |||
| dd6bb73ee0 | |||
| fc160eeccc | |||
| 48db72259e | |||
| 570150f1d3 | |||
| 9c7840c3a7 | |||
| aef98b7226 | |||
| 5c364f8082 | |||
| a842a6c94d | |||
| 2dd9ad7b0f | |||
| cd242a2637 | |||
| bdcbfe9310 | |||
| 9306921ded | |||
| 76f3855629 | |||
| 8621e2409f | |||
| 6212807a77 | |||
| 7622f0c441 | |||
| 0bc38a69ce | |||
| 25d0eae50c | |||
| 24382d77bb | |||
| ef6a9e6b07 | |||
| 353d66def1 | |||
| b8166af92b | |||
| afeabe0d23 | |||
| 6180487517 | |||
| 2d6b97be06 | |||
| 0e088d2264 | |||
| 53da927c3c | |||
| f0e32f12cf | |||
| c7b50d18e7 | |||
| 155c164b0c | |||
| 55cfc89459 | |||
| f40475f382 | |||
| ba8c09a58e | |||
| 045c85823b | |||
| b3b46fd456 | |||
| e8462790a9 | |||
| cc63078de5 | |||
| 59d66eb17a | |||
| 4dc7c36aa8 | |||
| e6bed000c3 | |||
| 028e2061e0 | |||
| 7d3512ab21 | |||
| fc9b36c769 | |||
| 2c216a42f9 | |||
| 45b01858a8 | |||
| c39078162e | |||
| 145b807ba2 | |||
| 1c2d148bfa | |||
| 7e9203d8e0 | |||
| 8d4c43327b | |||
| 546513861f | |||
| 6ab73c5512 | |||
| 8a0be42080 | |||
| 9183380946 | |||
| c8dca58e6d | |||
| ded3945467 | |||
| 04e0e9f5a0 | |||
| 826fbb18c4 | |||
| 9cd7f9ecad | |||
| 69ce87fbe4 | |||
| 07d672baeb | |||
| 26f5ee0621 | |||
| f165b1a120 | |||
| 3903dfe6a5 | |||
| 881acaa065 | |||
| 0a9ebac514 | |||
| 1b3c93e22a | |||
| aeb7442d8f | |||
| 84a66476ab | |||
| 2be8df93ad | |||
| ce34856e32 | |||
| a01aa156b9 | |||
| b5a483ae60 | |||
| d98e8366a0 | |||
| 6ec087d43c | |||
| bb372a6a8a | |||
| 742db5d8b4 | |||
| 772cd8199d | |||
| 5e9bef8a1b | |||
| a1d1dc96d6 | |||
| 35feb93f56 | |||
| bb7d8535aa | |||
| 4866467e98 | |||
| f37552a385 | |||
| 848104b1a9 | |||
| 2994274267 | |||
| 2157a6919a | |||
| 8627e237c8 | |||
| 1d0be956ae | |||
| 1d67d29183 | |||
| 702ab15b6a | |||
| f78cea58fa | |||
| 3dd846c93c | |||
| bcdc67b152 | |||
| c2aff0ccd4 | |||
| 490009745c | |||
| 68d9463be5 | |||
| de153b70ce | |||
| 9ff0b2987c | |||
| 0b603225d1 | |||
| cc4ca48d13 | |||
| 4fe110bd07 | |||
| f4c74e34d8 | |||
| bc09d7c3bd | |||
| 4cc2ef84d3 | |||
| 51031dd46c | |||
| 4c3f36b80c | |||
| 019f7a802e | |||
| 63015324c1 | |||
| 9de40578d3 | |||
| 97b41c41b0 | |||
| 36b8f35eed | |||
| d7e6b65a76 | |||
| d9d4c5916a | |||
| a4953610bb | |||
| ba4989dd45 | |||
| 1d70a45d84 | |||
| 5e370db6c5 | |||
| 28bdc90908 | |||
| d1afebf71e | |||
| e0ed320827 | |||
| c67bc303db | |||
| f62f1699cb | |||
| ee37130b5e | |||
| 91629a24fe | |||
| 5a68a9bbd4 | |||
| 5b475d5e08 | |||
| d6a2d734d3 | |||
| 11c99d5e66 | |||
| 479912a5ed | |||
| d01310383f | |||
| 5fc6af1c77 | |||
| b382660425 | |||
| 1c3ab017e8 | |||
| 135998acf5 | |||
| 987801c86d | |||
| 8925845684 | |||
| 4e94ddad46 | |||
| f8be0aeed1 | |||
| e34f8adbf4 | |||
| 5ac625f716 | |||
| 9651ab661b | |||
| c7925e5c9b | |||
| 8d654a86de | |||
| fb65953d82 | |||
| 9d18773fbc | |||
| df2aac01f4 | |||
| 98dfc9254f | |||
| 81987b64a6 | |||
| 487fde8496 | |||
| 44cf212720 | |||
| 821ac7b6f4 | |||
| 0007669381 | |||
| cbec16fedd | |||
| 01f9b1f6a4 | |||
| a700933611 | |||
| 64703207d4 | |||
| 59baa15d9f | |||
| c515d069cd | |||
| 021478af3b | |||
| 8a4f9d2367 | |||
| 8a7b7f1e2b | |||
| 0ea846dcdc | |||
| 52e9c6b8db | |||
| a9c15626e1 | |||
| d6489c8bf5 | |||
| 7fc26258c7 | |||
| 5c721b0aa0 | |||
| ab916d80fd | |||
| 7343a95772 | |||
| 9adaeb061a | |||
| b0eedfd7ba | |||
| 3fc9c00465 | |||
| 73c4a1dac9 | |||
| 6b8190a032 | |||
| 807e329a18 | |||
| ce7c24989d | |||
| 2da20f1443 | |||
| ab509d3f8e | |||
| 7907e4ca03 | |||
| c431816393 | |||
| 48ae886c32 | |||
| 97afe4125f | |||
| 1e9317e5cf | |||
| 19a1ffedcc | |||
| 0f21c38ff8 | |||
| 510f55ba30 | |||
| 32e6887d5f | |||
| fa42b652e5 | |||
| f95db88d19 | |||
| 1991852025 | |||
| 68fe0769a1 | |||
| 12e1682a87 | |||
| 2718038977 | |||
| 808f5820fa | |||
| 6261770f59 | |||
| 62d8952c0a | |||
| 0ffcdf6204 | |||
| 7a4ed7a867 | |||
| b1f94fa292 | |||
| e6087e1820 | |||
| 250965c6ca | |||
| 30c9dc473d | |||
| 59be55c0ab | |||
| 55f05a778f | |||
| 9655d43017 | |||
| ab3ad78ece | |||
| 2c9ceaef94 | |||
| a666e66e36 | |||
| 4deffd1ccb | |||
| 55e313bd08 | |||
| 84ec7c40cd | |||
| a5c3edaca9 | |||
| ef0ec1d0b2 | |||
| 69a3d3203c | |||
| 31a0c8d783 | |||
| 1e29d9f778 | |||
| 4cbcc7fd23 | |||
| ea5f2fcac4 | |||
| 46cf661ecd | |||
| d4c4ce49fc | |||
| 993420633b | |||
| cb9da7b371 | |||
| c0ea404a7c | |||
| e3456bf559 | |||
| 71e6733d4d | |||
| 0aec35bfc0 | |||
| 39271b02dd | |||
| 98b84d230a | |||
| dc66161f47 | |||
| 638d2cda11 | |||
| c4777879e6 | |||
| b139941423 | |||
| 61c3491b8b | |||
| e618c609fe | |||
| ef81d6bf06 | |||
| 9143f071d7 | |||
| e164ed6f12 | |||
| f41c7dffef | |||
| 03ca506a3d | |||
| 95ecf81d42 | |||
| 74e397b29c | |||
| 98c817df1b | |||
| f36dbfffe5 | |||
| 7cfe432ee2 | |||
| 8eaf657f95 | |||
| 8581c05ab3 | |||
| 490042f8e1 | |||
| 8ad81bed32 | |||
| 59cd42c164 | |||
| 0971522f43 | |||
| cd2fb68905 | |||
| a4369e1db6 | |||
| 7de5ccb879 | |||
| c20fdd45a5 | |||
| d6c79bbadb | |||
| a67b44ffa4 | |||
| 93916f400d | |||
| 5f8f0bc792 | |||
| dec68e5c0e | |||
| a17684ebe2 | |||
| 95538bb8c6 | |||
| e415587e8f | |||
| fd1a8abcd1 | |||
| a265765319 | |||
| 945bb93e48 | |||
| 3b4118f33e | |||
| eace9051e8 | |||
| bcf1d5160f | |||
| c7d77dfa0f | |||
| f1916a7515 | |||
| eb5ad2884c | |||
| 960f29c0b1 | |||
| 5ccbac7db1 | |||
| bce59d9911 | |||
| fb07ee5781 | |||
| aba5c8595a | |||
| 6ad96f7383 | |||
| b4a6dbfa65 | |||
| cb92390825 | |||
| 6cebd006d4 | |||
| dc7c77e1d5 | |||
| 9dbb326061 | |||
| fd208ca11c | |||
| 1e8217d880 | |||
| 2534199ee7 | |||
| 177b5632fd | |||
| a0d4f832cf | |||
| faf8544233 | |||
| 09757cbf0c | |||
| 4eb71d2cd2 | |||
| b78ecd6fb2 | |||
| 92e870b256 | |||
| fd72b64ca3 | |||
| 700614123d | |||
| 06047b83c7 | |||
| 2faf7d95db | |||
| 26ff0f3b50 | |||
| 9c846bb0c7 | |||
| e31dfa79d1 | |||
| 296edfbd95 | |||
| 318e244748 | |||
| 47159797cb | |||
| a7555b41df | |||
| c9018d74ac | |||
| 6e5db0b1da | |||
| 453b28bd81 | |||
| ddbfb026d5 | |||
| 1c3c795b84 | |||
| 77058d9b9f | |||
| 9c16bccbf4 | |||
| 20fe866651 | |||
| 74845cb3dc | |||
| 79a9f8b9c9 | |||
| 18d0437f8d | |||
| c945041067 | |||
| 173b31ce05 | |||
| 4e7300b68d | |||
| a7774e100f | |||
| 633ee06faf | |||
| 73494a4768 | |||
| b11f4a1473 | |||
| cd7eac062a | |||
| d7a8921de2 | |||
| 212c13bb2c | |||
| 625bb1d7ee | |||
| d5edd09beb | |||
| 0bff862876 | |||
| 1f2cf5cff4 | |||
| f7a1cef15b | |||
| 8ebff0b7c0 | |||
| 308d53858b | |||
| 392399e866 | |||
| 54964dd4bb | |||
| ae0873bc77 | |||
| 55d7483608 | |||
| 0f6ed6b633 | |||
| 3f7a66328a | |||
| 337bccf27d | |||
| aa558ab03d | |||
| 353c9598c1 | |||
| 2b971c14c0 | |||
| 459ce22bb3 | |||
| a5bb9472b6 | |||
| 250cb00c42 | |||
| 694dac7ff5 | |||
| 84a207f2e6 | |||
| f5bcca6cdf | |||
| c54299107a | |||
| 667abe888a | |||
| be3f4ce201 | |||
| fe1d8a9dd1 | |||
| bc238177b7 | |||
| 264d0d1735 | |||
| c93c0edcd9 | |||
| 2303a2231b | |||
| 6ca940b5a6 | |||
| 9bdef0888e | |||
| 9bdb8ffb3f | |||
| b66bbed548 | |||
| f8f4b8a249 | |||
| 38e8a61035 | |||
| 463b9ca374 | |||
| 8bafe067eb | |||
| 02885ee583 | |||
| 611f7ec38c | |||
| 53ba8d4926 | |||
| 6a697be060 | |||
| f490f320ae | |||
| ddd93a0576 | |||
| 4d81d402b9 | |||
| 58f50b7520 | |||
| ae2dcfc173 | |||
| 0f7cf40867 | |||
| e5c980f169 | |||
| 58a695b0a9 | |||
| 8b9a9aea81 | |||
| c185cbdc40 | |||
| e529dd9696 | |||
| 87cc0d4ca3 | |||
| 6b8bdf0c6b | |||
| 610450bc0e | |||
| 66e5718610 | |||
| 68b82ddd99 | |||
| 2ba72a91de | |||
| 19e8d2809a | |||
| 22c8185caa | |||
| 4cf04c8583 | |||
| 8245585dee | |||
| 42f7e5b7f8 | |||
| 56d120cb24 | |||
| 9006f7a34a | |||
| 84485afe6c | |||
| 1dc8dfd3ae | |||
| d5810eaef1 | |||
| 3dea03e72b | |||
| f2dafbc4f7 | |||
| b521155218 | |||
| dbfb1a69c6 | |||
| 9c810200e0 | |||
| 51ebc4f402 | |||
| ef97692622 | |||
| 6d6e9a5811 | |||
| 17de4bce20 | |||
| a81998f704 | |||
| 2949e5feca | |||
| d74aa0e1e6 | |||
| 8fa0c90062 | |||
| 96a55c17f1 | |||
| d66cab3f01 | |||
| c90cf08bae | |||
| d47f2fe1e0 | |||
| 5c66b5c712 | |||
| 0fa26e7d68 | |||
| eff0cb3067 | |||
| 3e261b3d9e | |||
| 8bac3b57ad | |||
| ff8bde53df | |||
| c79d85f763 | |||
| 171c95d6d8 | |||
| 58019383f3 | |||
| ff3db9ceee | |||
| 5484607ef2 | |||
| 21f214d6c9 | |||
| f3aebd4b33 | |||
| 31ab4c4c35 | |||
| e57bc34afe | |||
| 0c8c44b3e3 | |||
| a0dcbc0d16 | |||
| 744879a3f5 | |||
| e4e91d3042 | |||
| fa6117f136 | |||
| 45c21a9c8b | |||
| 9184cc68da | |||
| 2c2112e152 | |||
| 19ff065844 | |||
| 46eafa520d | |||
| dcfc189f11 | |||
| f0d190024a | |||
| 1cc25837b2 | |||
| 5cce44edb4 | |||
| 0ad72b38ab | |||
| 50c4f416b6 | |||
| 622261b1ea | |||
| 12d7902ca0 | |||
| e5d30fe5e2 | |||
| f6667801e1 | |||
| e3b4dd32c0 | |||
| 89f961faef | |||
| 22752f6ff0 | |||
| 562cdc805b | |||
| ca109497a1 | |||
| 0457923179 | |||
| 653a94e8ab | |||
| 2f4a0c5de4 | |||
| 8cf34ebbff | |||
| f3dd829459 | |||
| 965a92ce40 | |||
| bb4a916767 | |||
| e79a57b423 | |||
| 1118c42fcc | |||
| 02144fb50b | |||
| 5a53086e41 | |||
| 62cb914488 | |||
| 7d6be625fa | |||
| c4f204f440 | |||
| d50cf43e5e | |||
| 3f8c7be6f8 | |||
| 2022a7205c | |||
| 60a96e3d0d | |||
| 0784bbc4bf | |||
| 4357f5acdc | |||
| 850054d162 | |||
| 516f1a6316 | |||
| 4963f7356a | |||
| 6abbd35d81 | |||
| b92060f511 | |||
| 3a52bc4ce1 | |||
| 971d224983 | |||
| 3546dcac1a | |||
| 708d4f7533 | |||
| c7152c520a | |||
| c133974d67 | |||
| 61770d4472 | |||
| 930463a226 | |||
| c86c15f95f | |||
| a57ca0bbe7 | |||
| 2e43d8fe92 | |||
| accd21dec7 | |||
| 1f2498918d | |||
| 4a10540365 | |||
| 7766cc96c1 | |||
| 25bfff370a | |||
| e19391ef7a | |||
| 6fb36c8a51 | |||
| 6403e3021f | |||
| a5b75a095c | |||
| 2e6986892a | |||
| 4d11fc0330 | |||
| f0530e9f52 | |||
| eeeaac7147 | |||
| f8eb862073 | |||
| 61b85a0670 | |||
| ecf3bae150 | |||
| 99ace0a89c | |||
| d60cfe31a7 | |||
| e80012896a | |||
| 64e2f36d40 | |||
| e87554296c | |||
| 645120a400 | |||
| e8b43944e7 | |||
| d8ddec86f7 | |||
| a73a1c1bc1 | |||
| 1048304f30 | |||
| 506dfd1517 | |||
| 1e5b015ee3 | |||
| f19518d564 | |||
| 9269126fba | |||
| 21e41638e5 | |||
| 744ac33e8b | |||
| 6b8fe04054 | |||
| 48bf4878c1 | |||
| a6ac2abb64 | |||
| 78607950ac | |||
| 4ae47a529e | |||
| 98b10f587e | |||
| 2f4a4489ce | |||
| 3111f50f2f | |||
| b0873e7ed2 | |||
| 9e7035f5dc | |||
| d6f1ddf99c | |||
| 769ef7b0f5 | |||
| 690397e7c6 | |||
| 0cf2037ae1 | |||
| 42c22d4cae | |||
| 5bdf89e3f0 | |||
| 5a3bc5250e | |||
| aad51ffe3a | |||
| ea583e2e53 | |||
| 680abafe5d | |||
| a8b9109cc8 | |||
| 54aec05989 | |||
| 8688ff8b3a | |||
| e2e076d307 | |||
| 7537a2751d | |||
| cff84f09ba | |||
| a263e78f8d | |||
| 50e8b2160e | |||
| 1a05882d7c | |||
| 5f33cc3a95 | |||
| ad18df92d0 | |||
| 351c2905f5 | |||
| bb36139fc2 | |||
| d86c248d05 | |||
| 33803a3dee | |||
| cc5f518b21 | |||
| 1d7f9567ee | |||
| ee3031c914 | |||
| 337b6e83af | |||
| f3e60a9feb | |||
| 7f6304fac3 | |||
| 8f9627520b | |||
| a8b86e747b | |||
| 58a4f32298 | |||
| db84b19443 | |||
| c05fe2706c | |||
| ac504bea6c | |||
| 7d984b9547 | |||
| 58cdcbb5e4 | |||
| 94ea84d83f | |||
| f22170ad49 | |||
| cadd4310f6 | |||
| b1b412f63c | |||
| 7678fbd30d | |||
| b9e9777912 | |||
| 63a61fcc2a | |||
| 1e4eca8321 | |||
| 5b1ba66604 | |||
| 21d193b1c8 | |||
| 5aa8bf77db | |||
| 51ec6b722e | |||
| f6dc74501b | |||
| 7e47b0c6eb | |||
| 769b27b7f2 | |||
| b306730a57 | |||
| 41e88c232b | |||
| 4dcc5dab93 | |||
| b3f871717f | |||
| 949b6a7afa | |||
| 7fc54fc904 | |||
| 4b114fce3d | |||
| bb73569fd6 | |||
| b9edadc53e | |||
| 3055d2cf2c | |||
| 54c082dc35 | |||
| 201d6d097d | |||
| 4a03054ef4 | |||
| c6f2ee91f6 | |||
| ff9340d4d5 | |||
| 5a5ee83d28 | |||
| 9c1ab656d4 | |||
| 37aa74dfd2 | |||
| dd1f5dd966 | |||
| 1ad689e4d5 | |||
| c327019574 | |||
| a088a65656 | |||
| 802e94e9ca | |||
| 50bd293527 | |||
| 03f4fde468 | |||
| e68d087010 | |||
| eaa3e6aaf6 | |||
| f07a17ba2c | |||
| 3254bb2c8e | |||
| 4ef11d96e9 | |||
| 3cfea5a09f | |||
| 54b56959f5 | |||
| 98dcb6831b | |||
| a97954230d | |||
| f9b070d64d | |||
| 4bcc319e11 | |||
| 1d0df449e8 | |||
| 6cb38dc5dc | |||
| 8fe3d4f971 | |||
| a3b599ae30 | |||
| 2b083ca987 | |||
| 26e9b04fab | |||
| 84b5c7217d | |||
| c659c76053 | |||
| 343d039b37 | |||
| 260011670e | |||
| 68e26140ee | |||
| 5916386242 | |||
| 1fcacef239 | |||
| 494d2b8b61 | |||
| 35fdba81dd | |||
| 69f4d58381 | |||
| 0bc004de7c | |||
| 2583570e17 | |||
| 3845f267cb | |||
| 8f87950dc1 | |||
| 8bd9fb4427 | |||
| c851d0e705 | |||
| 00bf7f4d42 | |||
| 4c617c3643 | |||
| b00a40dd65 | |||
| eb28a64c3c | |||
| 9ea64767b0 | |||
| 12c2562b96 | |||
| 328aa9ae49 | |||
| ce8c7a77b6 | |||
| f2c70804ca | |||
| 6f725748ed | |||
| 8272e15bd6 | |||
| 46d1bae46a | |||
| 66d997e031 | |||
| a75b6f6e78 | |||
| 5644ab1e19 | |||
| 8c357dca8b | |||
| 9cfc180334 | |||
| 59db857ad1 | |||
| 661c7e3e37 | |||
| 575e6001f3 | |||
| 727bc32150 | |||
| 96ad352741 | |||
| 4403e117a7 | |||
| f41e4e8b1b | |||
| 62dccb3247 | |||
| 445e38acf6 | |||
| 67fa5691e5 | |||
| c0c1ebe757 | |||
| a5c3424cfb | |||
| 62a7ca462f | |||
| bd81ac0f17 | |||
| e8be96bfe7 | |||
| b72ca15bd2 | |||
| d8b05e001d | |||
| be66fdcfab | |||
| 19bd6f103a | |||
| 9fd6506d1f | |||
| 28ac219d81 | |||
| 64753ea633 | |||
| 75442e48ce | |||
| 4e3f4104ab | |||
| 3cb34af82c | |||
| 26ec41288d | |||
| 2ccbff6c6c | |||
| 8abf6403d5 | |||
| 13707e0808 | |||
| 9344d41ac5 | |||
| b99f2279c3 | |||
| 12ae11ef62 | |||
| 538bc41bbb | |||
| da46b56e85 | |||
| e468d75286 | |||
| b6a28f1de7 | |||
| 74f138c5e8 | |||
| 22d073eb2b | |||
| 6d2e056187 | |||
| ccd47011b9 | |||
| ccf10a973a | |||
| fb37b57c2d | |||
| 48bb3ab4e7 | |||
| 6ef0096dc9 | |||
| 5e72e4c0d9 | |||
| bfb1cd36e2 | |||
| 20100d0a40 | |||
| a32ac287bb | |||
| 840754dd42 | |||
| c04cad92ac | |||
| fb5d72973e | |||
| 500f6ed0c5 | |||
| aff978f60a | |||
| 3f576830f9 | |||
| 4dbaa389c8 | |||
| 9ad6d0c65f | |||
| 257aa92421 | |||
| 48cc816136 | |||
| 377083e6ae | |||
| ece86f717b | |||
| 1a24801246 | |||
| c2ffb1a098 | |||
| 3a6ff2d7b8 | |||
| 37721572e7 | |||
| d7f5172860 | |||
| 2ae6214104 | |||
| 489b1b9633 | |||
| 201a110c51 | |||
| 1a9841a0f1 | |||
| ea3240ad55 | |||
| 1d4b1c48cc | |||
| 55685b7cf5 | |||
| 956e728b40 | |||
| f6cade41b4 | |||
| 3358a77c7a | |||
| 94d679c4e6 | |||
| 6e76f0c6cd | |||
| bc947477f3 | |||
| 616f871735 | |||
| 55ad54e0ff | |||
| 29f72292ba | |||
| 624c0ac3ef | |||
| 00ee531005 | |||
| 9b5633ff4f | |||
| ac99832d21 | |||
| ca30116144 | |||
| 17a06af1ff | |||
| d30c013721 | |||
| 41ba13f951 | |||
| c25016030c | |||
| 5cf285bce9 | |||
| 31a40fa37f | |||
| 2806273340 | |||
| 613a73b1b6 | |||
| 602248d5fe | |||
| 73ee36c48d | |||
| f681baa9cd | |||
| 2ba641b25e | |||
| b8fdb65fbf | |||
| d21411ead9 | |||
| 2d30e82dcb | |||
| 65f2e6b269 | |||
| 64fcbd0387 | |||
| 0b165afd9e | |||
| d07a5c084d | |||
| bef9bf0d38 | |||
| 3954792f37 | |||
| a2928321b6 | |||
| eadfb5be67 | |||
| 8c7b5f5d3b | |||
| 764732944f | |||
| 33737ef57a | |||
| be8b4f89d6 | |||
| ae58a9ada2 | |||
| 32c3f16f95 | |||
| 57feda4328 | |||
| 1c862dc15b | |||
| 9e29ac6549 | |||
| a11850d2fb | |||
| 96e5c5c6ca | |||
| 24c68a697b | |||
| e0cc5ba920 | |||
| d8061afe24 | |||
| 9601890549 | |||
| 1b9ecbac3b | |||
| 874b2eb32d | |||
| 1559dd4adc | |||
| ac0941be9a | |||
| f1fb92fd01 | |||
| 22bfbd0f8d | |||
| fb159e1cff | |||
| 3e1d1aff18 | |||
| 3a441c3e94 | |||
| 8bc0033326 | |||
| c96af471ee | |||
| d4ca8647dc | |||
| db786fac13 | |||
| 57a01e6bbb | |||
| d0d41b8bce | |||
| 046485a7bb | |||
| d806581666 | |||
| 341096dce8 | |||
| 9058135da0 | |||
| 35055ed5c1 | |||
| 34960ca50c | |||
| f8d8958884 | |||
| 9098d7d0a3 | |||
| d03c4e5901 | |||
| e529210f43 | |||
| 3a3f54932a | |||
| cf7be0e461 | |||
| 8fdff33b3a | |||
| dc4014668d | |||
| 221902a882 | |||
| 91ed085ca4 | |||
| 3f57662cd0 | |||
| d3931111fb | |||
| efc0d1e0b9 | |||
| b562b50196 | |||
| a21036e69a | |||
| 2d8b5a8191 | |||
| 46ab8edf30 | |||
| 8220794c44 | |||
| b520694b00 | |||
| 5f0530b68a | |||
| 7571a6b021 | |||
| 3fe7275332 | |||
| 3d66d00313 | |||
| fde7f8d6b9 | |||
| ee8cf77071 | |||
| a4b3bc7714 | |||
| 2d2da8364f | |||
| c8c74e591f | |||
| 592cec72e2 | |||
| 91f29d4a68 | |||
| a6e1ea216d | |||
| ffc00caea3 | |||
| 4dba8522a1 | |||
| 7fb3221d47 | |||
| b29caead32 | |||
| 74e91cd925 | |||
| 639fd05239 | |||
| 4cadf11d1d | |||
| baa382f055 | |||
| d6887beead | |||
| b5af3fbe45 | |||
| 7ad705066d | |||
| 6f387b4916 | |||
| c7314e526e | |||
| 05d862782f | |||
| 9bfe0e63f4 | |||
| f9a8377fe6 | |||
| 3f17423d36 | |||
| 30494bd96d | |||
| cf9bbee256 | |||
| 05f1419df4 | |||
| 6f038a7f6d | |||
| a19deba26c | |||
| 0b3721502e | |||
| 193fd5532f | |||
| 2843264bd8 | |||
| 17835c6f42 | |||
| fa1dc5e448 | |||
| 17e4e478cd | |||
| 99aecf1f2e | |||
| 6d2accba7b | |||
| cee363e28c | |||
| b4cd37276b | |||
| 1887c77498 | |||
| d0e4673a3f | |||
| 11cb3e9a01 | |||
| 6eb8dfd902 | |||
| 8e99e4671f | |||
| 7992346190 | |||
| e841395dfd | |||
| dc6b6bdc96 | |||
| bf7ab0da7a | |||
| cf99a1f37d | |||
| 9b0aae665f | |||
| 1f4e7bbdce | |||
| deac65a92d | |||
| 4a0da933f0 | |||
| 1f765e5b59 | |||
| f6e54a7bd4 | |||
| e2f6745a0e | |||
| 462bafdd2c | |||
| 53260e7a39 | |||
| 39e7ef1243 | |||
| e9ed288b00 | |||
| a900790b44 | |||
| 9c38a52bad | |||
| dda3da45fb | |||
| b731bf6976 | |||
| 1247d7aea8 | |||
| 2e4ba02443 | |||
| 5f8b82b90c | |||
| 9f0e990b40 | |||
| a19aa9627d | |||
| 25bfa7e830 | |||
| 56667e9d32 | |||
| aff5254208 | |||
| afda459886 | |||
| 49f56a25d1 | |||
| 9e29fb2c6a | |||
| c43869a83a | |||
| c2ca396353 | |||
| bc5ed9acaf | |||
| 87bc17831d | |||
| 7a63bdbd72 | |||
| b4b70702fd | |||
| 76cbcff2f1 | |||
| 516aac6518 | |||
| 8e1b5dda4b | |||
| f43589369a | |||
| 675fd1a065 | |||
| 9386522543 | |||
| c99922b591 | |||
| a98f3e0f5e | |||
| 331f832c34 | |||
| de0c199604 | |||
| f92fda0cfd | |||
| 022c12b8e4 | |||
| 3ed30169ea | |||
| 100323ab4d | |||
| 0b4d3544b9 | |||
| bc3889ffa1 | |||
| 6965a136a0 | |||
| ed8e3b676f | |||
| 180b06d7e3 | |||
| 254dee6ac7 | |||
| 882fa27ff5 | |||
| 3bd376853c | |||
| 264850bc16 | |||
| 3346b68ccd | |||
| 6bba16ccf7 | |||
| 9a120cf5ec | |||
| 0afb64bf24 | |||
| e8efa6320e | |||
| 8d77d758c3 | |||
| 537f47404b | |||
| e3b61bdfce | |||
| 0e7945fe54 | |||
| a0d041b522 | |||
| 86b9d24b62 | |||
| bd721ce1c8 | |||
| 8c57bcaece | |||
| 3e3a8dc0c0 | |||
| a852d13f03 | |||
| 519eab8ff0 | |||
| 4350c1e0f7 | |||
| a26fdab719 | |||
| f986e123d2 | |||
| 8c59605e05 | |||
| af6e8f7829 | |||
| 70638bf1f1 | |||
| e59b6a805c | |||
| cbfa4097b4 | |||
| 54d8972753 | |||
| 5d8303e94d | |||
| 8c40dd9c4f | |||
| 5159b26261 | |||
| 1339a7f8b0 | |||
| b38bf82d48 | |||
| c33ec96fc8 | |||
| e58cc72fe5 | |||
| adc4f86020 | |||
| 577325cb7a | |||
| 074430af0d | |||
| 5b46992a15 | |||
| 46c4379592 | |||
| 873110d482 | |||
| e7d25647e6 | |||
| f761ab0f50 | |||
| 4cee0e8653 | |||
| c28551f40f | |||
| 2a28cfb3a3 | |||
| 6b2a786779 | |||
| 6c7eb60d6f | |||
| b00622302b | |||
| cf27f22dc0 | |||
| 051b23fe10 | |||
| 3057b2762a | |||
| 40192841a4 | |||
| 4e462209c7 | |||
| 151a6f4e14 | |||
| 1771f97551 | |||
| 8d1b26dd4b | |||
| a36c974f26 | |||
| 2eaf73e8b3 | |||
| cc6218a692 | |||
| c0977dcfaa | |||
| 43bdbb5080 | |||
| 5166888c0a | |||
| f1255197c2 | |||
| 7f3ae64a31 | |||
| 0097b81778 | |||
| e179828662 | |||
| 457cc0d5a3 | |||
| e6e72d23df | |||
| 680f4e3636 | |||
| d388b831b4 | |||
| add4495a4a | |||
| a108d5d3b0 | |||
| b4a570477c | |||
| 541d52ab97 | |||
| 48f425d31c | |||
| 52174da232 | |||
| 556befaaaa | |||
| 6cec662ac5 | |||
| 65c91eae64 | |||
| c6baa3e657 | |||
| 6103c29ee3 | |||
| 8b765be2b1 | |||
| 6e6843ac69 | |||
| b1d2c60d07 | |||
| a411b48a91 | |||
| c8dc8ff891 | |||
| 22d384b07d | |||
| ebcb87abe1 | |||
| b613ed0bb8 | |||
| f5dcca7b1b | |||
| 1576b7837a | |||
| 4eb08ac9de | |||
| 43e71ff28c | |||
| fa5779537c | |||
| b42453d1fd | |||
| 379943abf5 | |||
| 5548fd6928 | |||
| 06dcbed6b1 | |||
| 9f9796b888 | |||
| 242e447bc5 | |||
| 2203c6e597 | |||
| 5555a852be | |||
| 352bccf6ca | |||
| 4da2c2ea00 | |||
| 48b9692845 | |||
| c946e77143 | |||
| 1ec1b4ee44 | |||
| b802abc83f | |||
| 015fbee772 | |||
| 1ab92563b9 | |||
| 14591c72d6 | |||
| 8215893152 | |||
| 5a7751d9df | |||
| 933ccfdc4f | |||
| 5fcf42cb30 | |||
| 79c51ac51f | |||
| 4e596da589 | |||
| e647cf0459 | |||
| 7119bce9f3 | |||
| 41c9785f3b | |||
| 8919bf9e0a | |||
| cd90f55536 | |||
| 443efd875e | |||
| 133493dc79 | |||
| dc7132af71 | |||
| 02ae26d091 | |||
| 58d32a4d0e | |||
| 961fbb2718 | |||
| 2ffd941d67 | |||
| 6bb17502f9 | |||
| 4a8fd55f52 | |||
| ca554f661b | |||
| 8299bc39ea | |||
| e02cbaa016 | |||
| 29be76f958 | |||
| 7f04b85368 | |||
| 463c31ae09 | |||
| e3acb36de6 | |||
| a115f3b086 | |||
| 3657f2303d | |||
| b2e0f72a7e | |||
| 27c2d13968 | |||
| 9ed1fb45e1 | |||
| ebed239e49 | |||
| 5415180676 | |||
| 52403d587c | |||
| 55ccb8ccf4 | |||
| 7b0dd6c5d6 | |||
| cdd5cdeda2 | |||
| 35d949cc17 | |||
| cb4b82b09f | |||
| b9d16a7191 | |||
| cd990ba13d | |||
| 07d57b6d55 | |||
| 249165d1b2 | |||
| 5ebc7a1756 | |||
| b720222d98 | |||
| bf60764e4b | |||
| 0e8415de1b | |||
| 890b13dd5b | |||
| 2b46ad38e2 | |||
| aeda7b923d | |||
| 9d93d1e6d4 | |||
| 193860dbc8 | |||
| 253362f978 | |||
| 99a1ff423d | |||
| ea52562527 | |||
| f663be2a6c | |||
| 6a39089a43 | |||
| 4a1d4f1b3c | |||
| bdf18941a2 | |||
| 31fd146cc0 | |||
| d904e2b9ac | |||
| c770f96be7 | |||
| c0ead94791 | |||
| a98c01c86a | |||
| 7ac997bd58 | |||
| d5b1bfb4bb | |||
| 24fc71b2e9 | |||
| 6f05404cb8 | |||
| d8ffa09e3b | |||
| b7090ebba4 | |||
| dcc23faa4a | |||
| c72db6c6f6 | |||
| b0485894b3 | |||
| 25d523c0f4 | |||
| 0b7d389258 | |||
| f159495a9d | |||
| 35cfef2129 | |||
| 94f728bee4 | |||
| c678f2d255 | |||
| 51f0da7b93 | |||
| d5fd34b6e8 | |||
| 9dacdc947d | |||
| 2d8cf9e456 | |||
| c5fa18eb20 | |||
| dc970c6442 | |||
| 8b4073d84c | |||
| fc32450360 | |||
| 9ec3529864 | |||
| 2a67214f9d | |||
| 42eac283e2 | |||
| 71d5927a66 | |||
| 38598190c3 | |||
| f2ac20e7ab | |||
| 2e275e1e65 | |||
| 750dd5f5fd | |||
| 80463ecaea | |||
| 74432432b6 | |||
| 128ad0999f | |||
| b8eef54fa7 | |||
| d707c4e0a3 | |||
| e2e3ea5742 | |||
| b9939e3974 | |||
| 4b4dcc4c13 | |||
| 3083d2e908 | |||
| afe6c4f64f | |||
| 898f64cdd7 | |||
| 62e8d2d127 | |||
| 52a6ba9767 | |||
| b7416d79e3 | |||
| 4d2198ea56 | |||
| 2f8431ab03 | |||
| 7007d6a176 | |||
| a9e574dd27 | |||
| a37a9789c9 | |||
| 73c0db82d5 | |||
| 5c8858f31b | |||
| eb58297a43 | |||
| 47292de769 | |||
| 1851327d19 | |||
| b32c14b433 | |||
| a5b0c492d7 | |||
| 42f167ea37 | |||
| 650410cb2f | |||
| f6ab726cef | |||
| f64d39ab57 | |||
| 5483ed641e | |||
| 4e1a3aee82 | |||
| d929f88421 | |||
| 1556c2ba3f | |||
| 6bd11d920a | |||
| 62fec04419 | |||
| 8ddfa7e6b0 | |||
| aee6669d0b | |||
| e5a25dfcb1 | |||
| a17ce0695b | |||
| c94b7cc43c | |||
| e6ec92d0e4 | |||
| 25a8266638 | |||
| d964d01d6a | |||
| 6eae2c1083 | |||
| 0fce523792 | |||
| 354347ce91 | |||
| 520af214af | |||
| 2eb5ab26bf | |||
| 62ee8e1cb3 | |||
| af72ade26a | |||
| 3931ad65c8 | |||
| e7661d3b12 | |||
| 8195d302dc | |||
| cffad66894 | |||
| f7d80aac7f | |||
| df9056eb4b | |||
| 08f20da103 | |||
| 2ee9322a8f | |||
| 2c9e5aa054 | |||
| b0ce9e3934 | |||
| ac181abc95 | |||
| 5e9a82b72b | |||
| 18a885d195 | |||
| b5356935e9 | |||
| 1674f899e0 | |||
| eb0925d702 | |||
| f678be5f94 | |||
| b47d33c4f1 | |||
| 388b735fd0 | |||
| 26148c3323 | |||
| 3e3df092bb | |||
| c656164015 | |||
| e25f10566c | |||
| 57586c8e05 | |||
| 5d1b866e7a | |||
| d6c02e72d6 | |||
| 56b3631187 | |||
| d4aa37112d | |||
| 1408a3c0f9 | |||
| 81367eaa12 | |||
| 3b9110b5db | |||
| 23df6cf18e | |||
| 6b04dd4a5d | |||
| 3e41cfecf1 | |||
| 1972eea128 | |||
| 5aac6dc85b | |||
| 933c54d9c4 | |||
| 6d71ff98e5 | |||
| fddb904b4c | |||
| 3cb04f555d | |||
| cab7ef9bc2 | |||
| b59553bd65 | |||
| ab9a764bb1 | |||
| 94f9e781f4 | |||
| f1876b7e95 | |||
| 2ae42c40a8 | |||
| 2d54ef2a52 | |||
| 1eee664092 | |||
| 977c7721d5 | |||
| eb2dd37e3c | |||
| 5267658748 | |||
| 69d578478a | |||
| 6e90038bf6 | |||
| d9a454bc9f | |||
| 993419d9fb | |||
| 516bc0c666 | |||
| 927c62d8a3 | |||
| f373517d2e | |||
| 31f4f4f1e1 | |||
| 8f5281563e | |||
| 81d5eabf6c | |||
| 4666acfbb0 | |||
| ce6a3a8ed4 | |||
| 4cd678ddb4 | |||
| 982274e5a0 | |||
| 48a38ef4fd | |||
| 9e597ac50a | |||
| 57cd8d87f5 | |||
| 02262b0019 | |||
| e06a11ee5e | |||
| ad31cd0c23 | |||
| d5eee231e0 | |||
| 15dda435e6 | |||
| d081715504 | |||
| 0c1f8b70e9 | |||
| d066450a24 | |||
| 18b26a7a70 | |||
| b47314f726 | |||
| d29733069f | |||
| 2de009d994 | |||
| 48581e8e8b | |||
| cebf90195c | |||
| 154a8700f4 | |||
| cc21f0a709 | |||
| 0c5c974e6d | |||
| d198fcbc1c | |||
| 06843d4574 | |||
| c86f79c4be | |||
| 7b97e50b7b | |||
| 9ba89e64dc | |||
| 19372bf5ca | |||
| 98be168396 | |||
| 19b9069453 | |||
| 1a9d4d3655 | |||
| e0af0e658d | |||
| 73aaec2df8 | |||
| 4f57ccc66c | |||
| d46e6adb8f | |||
| 9bea4e25ee | |||
| 7f1af07fb3 | |||
| 5560a84705 | |||
| 8801c59cce | |||
| 196fd203e2 | |||
| 98f14f1030 | |||
| 886df6ed1e | |||
| af0220a046 | |||
| f04b6312c8 | |||
| aef11025aa | |||
| 1e08841fa5 | |||
| 37a3b39a61 | |||
| 483cab34ab | |||
| dd36baf3ce | |||
| 82eeb9d07e | |||
| 613706dca2 | |||
| d9054f67fd | |||
| e6e396b3f7 | |||
| a8238d0b25 | |||
| b234865d77 | |||
| 4e8b9c6928 | |||
| 83f0dc19ff | |||
| 59eff71fc5 | |||
| 2734107d5c | |||
| d4a93ec7b4 | |||
| b16e70dabc | |||
| 96260b60b0 | |||
| a0b1e3afc9 | |||
| 63c7eb262e | |||
| 3ffaedce8e | |||
| 110ddd1900 | |||
| e6df221165 | |||
| 523abad40f | |||
| 3901b7d77a | |||
| d9cff588c5 | |||
| 808066fdf1 | |||
| 9e200b9d7a | |||
| 3530000ea6 | |||
| 09582509e5 | |||
| b01fa51db0 | |||
| eb15a8dacb | |||
| d7f1aa522e | |||
| 5aefa56e5c | |||
| 4ba6d36ad6 | |||
| b1cb3f255d | |||
| 0021b72da9 | |||
| 1a1474b323 | |||
| fdb886fe1a | |||
| ad1b9b6ccf | |||
| 3916caf7c4 | |||
| b7e2881014 | |||
| b0c9282fe9 | |||
| 3cb295ece1 | |||
| c802a03e07 | |||
| 46b66c933e | |||
| c80c881db0 | |||
| 74f28edbe5 | |||
| 3c5f08a1d6 | |||
| 523e3bd8d5 | |||
| 8b17cbf9d7 | |||
| 8144438023 |
+100
-6
@@ -1,8 +1,102 @@
|
||||
# Exclude directories
|
||||
_site
|
||||
.sass-cache
|
||||
.jekyll-metadata
|
||||
pdf
|
||||
# Compiled Object files #
|
||||
#########################
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Exclude backup files
|
||||
|
||||
# Editor files #
|
||||
################
|
||||
*~
|
||||
*#
|
||||
|
||||
# Precompiled Headers #
|
||||
#######################
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries #
|
||||
##############################
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files #
|
||||
########################
|
||||
*.mod
|
||||
|
||||
# Compiled Static libraries #
|
||||
#############################
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables #
|
||||
###############
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# http://www.gnu.org/software/automake #
|
||||
########################################
|
||||
Makefile.in
|
||||
Makefile
|
||||
Config.h
|
||||
Config.h.in
|
||||
config.log
|
||||
config.status
|
||||
.deps
|
||||
|
||||
# http://www.gnu.org/software/autoconf #
|
||||
########################################
|
||||
autom4te.cache
|
||||
aclocal.m4
|
||||
compile
|
||||
configure
|
||||
depcomp
|
||||
install-sh
|
||||
missing
|
||||
stamp-h1
|
||||
config.sub
|
||||
config.guess
|
||||
INSTALL
|
||||
|
||||
# Packages #
|
||||
############
|
||||
# it's better to unpack these files and commit the raw source
|
||||
# git has its own built in compression methods
|
||||
*.7z
|
||||
*.dmg
|
||||
*.gz
|
||||
*.iso
|
||||
*.jar
|
||||
*.rar
|
||||
*.tar
|
||||
*.zip
|
||||
|
||||
# Logs and databases #
|
||||
######################
|
||||
*.log
|
||||
*.sql
|
||||
*.sqlite
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# build directory #
|
||||
###################
|
||||
build/*
|
||||
|
||||
# IDE related files #
|
||||
#####################
|
||||
*.xcodeproj/*
|
||||
build.sh
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
Peter Boyle
|
||||
Azusa Yamaguchi
|
||||
Intel Parallel Computing Centre @ Higgs Centre for Theoretical Physics
|
||||
University of Edinburgh
|
||||
Scotland, UK
|
||||
-571
@@ -1,571 +0,0 @@
|
||||
## [3.4.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.8)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Improve type readability for larger viewports by bumping up base `font-size`. [#533](https://github.com/mmistakes/minimal-mistakes/issues/533)
|
||||
- Update Portuguese localized UI text. [#541](https://github.com/mmistakes/minimal-mistakes/pull/541)
|
||||
- Add `page.title` and via parameter to Twitter share link. [#538](https://github.com/mmistakes/minimal-mistakes/pull/538)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix Last.fm author profile URL. [#540](https://github.com/mmistakes/minimal-mistakes/pull/540)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Move Brazilian Portuguese localized text under `pt-BR` key.
|
||||
|
||||
## [3.4.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.7)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add `layout` based and user-defined class names to `<body>` element for added CSS hooks. [#526](https://github.com/mmistakes/minimal-mistakes/pull/526)
|
||||
- Add simplified Chinese localized UI text. [#532](https://github.com/mmistakes/minimal-mistakes/pull/532)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Remove duplicate include of `base_path` in category-list.html [#522](https://github.com/mmistakes/minimal-mistakes/pull/522)
|
||||
|
||||
## [3.4.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.6)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add Italian "comments" related localized UI text. [#514](https://github.com/mmistakes/minimal-mistakes/pull/514)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Disable `compress` HTML layout by default. To enable add `layout: compress` to `_layouts/default.html`.
|
||||
|
||||
## [3.4.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.5)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Improve line numbered code block styling when using `{% highlight linenos %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513)
|
||||
- Add English fallback to "Follow" button label. [#496](https://github.com/mmistakes/minimal-mistakes/pull/496)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix Firefox alignment issues with code blocks generated with the `{% highlight %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Clarified comment for `author.stackoverflow` value used in author sidebar links. [#487](https://github.com/mmistakes/minimal-mistakes/pull/487)
|
||||
- Add list of localized text strings. [#488](https://github.com/mmistakes/minimal-mistakes/pull/488)
|
||||
- Add `{% highlight %}` code block examples to demo site.
|
||||
- Add documentation for using custom sidebar navigation menus. [#476](https://github.com/mmistakes/minimal-mistakes/issues/476)
|
||||
|
||||
## [3.4.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.4)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add French "comments" related localized UI text. [#472](https://github.com/mmistakes/minimal-mistakes/pull/472)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Exclude `vendor` in Jekyll config file.
|
||||
- Fix Liquid syntax error for offending parenthesis. [#479](https://github.com/mmistakes/minimal-mistakes/issues/479)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update gems: `colorator` (1.1.0), `forwardable-extended` (2.6.0), `github-pages` (93), `jekyll` (= 3.2.1), `minima` (= 1.0.1).
|
||||
|
||||
## [3.4.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Make ["honeypot" `input`](https://github.com/mmistakes/minimal-mistakes/commit/06a8249a69a37dddda7e2a5bfbe32056c1a9a607) in Staticman comment form less obvious to spam bots
|
||||
- Add padding to `.highlight` code blocks to better [align `overflow` scrollbar](https://github.com/mmistakes/minimal-mistakes/commit/e4abec0a6f7f8cff72505ca0754615df294fd5b3) to the bottom.
|
||||
- Add additional image options for Twitter card social sharing meta tags. [#466](https://github.com/mmistakes/minimal-mistakes/pull/466)
|
||||
- Add structured data markup for Staticman comments. [#458](https://github.com/mmistakes/minimal-mistakes/issues/458)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Format `og:locale` tag with `_` instead of `-`. [#462](https://github.com/mmistakes/minimal-mistakes/issues/462)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Add note to docs about using `url: http://localhost:4000` when working locally.
|
||||
|
||||
## [3.4.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Improve UX of static comment forms. [#448](https://github.com/mmistakes/minimal-mistakes/issues/448)
|
||||
|
||||
## [3.4.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.1)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add `staticman.filename` configuration with UNIX timestamp for sorting data files. example ~> `comment-1470943149`.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Don't add `<a>` to author name if URL is blank.
|
||||
|
||||
## [3.4.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.0)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Support static-based commenting via [Staticman](https://staticman.net/) for sites hosted with GitHub Pages. [#424](https://github.com/mmistakes/minimal-mistakes/issues/424)
|
||||
|
||||
## [3.3.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.7)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Re-enabled Jekyll plugins in `_config.yml` in case they aren't autoloaded in `Gemfile`. [#417](https://github.com/mmistakes/minimal-mistakes/issues/417)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Fallback to `site.github.url` for use in `{{ base_path }}` when `site.url` is `nil`.
|
||||
- Replace Sass and Autoprefixer `npm` build scripts with [Jekyll's built-in asset support](https://jekyllrb.com/docs/assets/). [#333](https://github.com/mmistakes/minimal-mistakes/issues/333)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Document `site.repository` and its role with [`github-metadata`](https://github.com/jekyll/github-metadata) gem.
|
||||
- Add sample [archive page with content](https://mmistakes.github.io/minimal-mistakes/archive-layout-with-content/) for testing styles on demo site.
|
||||
|
||||
## [3.3.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.6)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix blank `site.teaser` bug. [#412](https://github.com/mmistakes/minimal-mistakes/issues/412)
|
||||
|
||||
## [3.3.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.5)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add English default text `site.locale` strings. [#407](https://github.com/mmistakes/minimal-mistakes/issues/407)
|
||||
- Add Portuguese localized UI text. [#411](https://github.com/mmistakes/minimal-mistakes/pull/411)
|
||||
- Add Italian localized UI text. [#409](https://github.com/mmistakes/minimal-mistakes/pull/409)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Remove unused Google AdSense variables in `_config.yml`. [#404](https://github.com/mmistakes/minimal-mistakes/issues/404)
|
||||
- Update `Gemfile` instructions for using `github-pages` vs. native `jekyll` gems.
|
||||
- Disable `gems:` in `_config.yml` and enable plugins with Bundler instead.
|
||||
- Add `repository` to `_config.yml` to suppress GitHub Pages error `Liquid Exception: No repo name found.`
|
||||
|
||||
## [3.3.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.4)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add support for configurable feed URL to use a service like FeedBurner instead of linking directly to `feed.xml` in `<head>` and the site footer. [#378](https://github.com/mmistakes/minimal-mistakes/issues/378), [#379](https://github.com/mmistakes/minimal-mistakes/pull/379), [#406](https://github.com/mmistakes/minimal-mistakes/pull/406)
|
||||
- Add Turkish localized UI text. [#403](https://github.com/mmistakes/minimal-mistakes/pull/403)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update gems: `activesupport` (4.2.7), `ffi` (1.9.14), `github-pages` (88), `jekyll-redirect-from` (0.11.0), `jekyll-watch` (1.5.0).
|
||||
|
||||
## [3.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Make footer stick to the bottom of the page.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix `gallery` size bug [#402](https://github.com/mmistakes/minimal-mistakes/issues/402)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Set default `lang` to `en`.
|
||||
|
||||
## [3.3.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.2)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix JavaScript that triggers "sticky" sidebar to avoid layout issues on screen sizes < `1024px`. [#396](https://github.com/mmistakes/minimal-mistakes/issues/396)
|
||||
|
||||
## [3.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.1)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Enable image popup on < 500px wide screens. [#385](https://github.com/mmistakes/minimal-mistakes/issues/385)
|
||||
- Indicate the relationship between component URLs in a paginated series by applying `rel="prev"` and `rel="next"` to pages that use `site.paginator`. [#253](https://github.com/mmistakes/minimal-mistakes/issues/253)
|
||||
- Improve link posts in archive listings. [#276](https://github.com/mmistakes/minimal-mistakes/issues/276)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update gems: `github-pages` (86), `ffi` 1.9.13, `jekyll-mentions` 1.1.3, and `rouge` 1.11.1
|
||||
- Fix note about custom sidebar content appearing below author profile. [#388](https://github.com/mmistakes/minimal-mistakes/issues/388)
|
||||
|
||||
## [3.2.13](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.13)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add English default UI text for Canada, Great Britain, and Australia. [#377](https://github.com/mmistakes/minimal-mistakes/issues/377)
|
||||
- Switch default locale from `en-US` to `en`.
|
||||
|
||||
## [3.2.12](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.12)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Remove window width "magic number" from sticky sidebar check in `main.js` for improved flexibility. [#375](https://github.com/mmistakes/minimal-mistakes/pull/375)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix author override conditional where a missing `authors.yml` would show broken sidebar content. Defaults to `site.author`. [#376](https://github.com/mmistakes/minimal-mistakes/pull/376)
|
||||
|
||||
## [3.2.11](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix disappearing author sidebar links [#372](https://github.com/mmistakes/minimal-mistakes/issues/372)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update gems: `github-pages` (84), `jekyll-github-metadata` 2.0.2, and `kramdown` 1.11.1
|
||||
- Update vendor JavaScript: jQuery 1.12.4, Stickyfill.js 1.1.4
|
||||
- Update Font Awesome 4.6.3
|
||||
|
||||
## [3.2.10](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.10)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Add `CONTRIBUTING.md`
|
||||
|
||||
## [3.2.9](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.9)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add support for [header overlay images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#header-overlay) for Open Graph images. [#358](https://github.com/mmistakes/minimal-mistakes/pull/358)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix `Person` typo Schema.org type [#358](https://github.com/mmistakes/minimal-mistakes/pull/358)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update `github-pages` gem and dependencies.
|
||||
- Remove `minutes_read` to avoid awkward reading time wording [#356](https://github.com/mmistakes/minimal-mistakes/issues/356)
|
||||
|
||||
## [3.2.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.8)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Remove `cursor: pointer` that appears on white-space surrounding author side list items and links. [#354](https://github.com/mmistakes/minimal-mistakes/pull/354)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Add contributing information to `README.md`. [#357](https://github.com/mmistakes/minimal-mistakes/issues/357)
|
||||
|
||||
## [3.2.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.7)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add French localized UI text. [#346](https://github.com/mmistakes/minimal-mistakes/pull/346)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix branch logic for Yandex and Alexa in `seo.html`. [#348](https://github.com/mmistakes/minimal-mistakes/pull/348)
|
||||
|
||||
## [3.2.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.6)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix error `Liquid Exception: divided by 0 in _includes/archive-single.html, included in _layouts/single.html` caused by null `words_per_minute` in `_config.yml`. [#345](https://github.com/mmistakes/minimal-mistakes/pull/345)
|
||||
|
||||
## [3.2.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.5)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix link color in hero overlay to be white.
|
||||
- Remove underlines from archive item titles.
|
||||
|
||||
## [3.2.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.4)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Improve text alignment of masthead, hero overlay, page footer to be flush left and remove awkward white-space gaps. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342)
|
||||
- Add Spanish localized UI text. [#338](https://github.com/mmistakes/minimal-mistakes/pull/338)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix alignment of icons in author sidebar [#341](https://github.com/mmistakes/minimal-mistakes/issues/341)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Add background color to page footer to set it apart from main content. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342)
|
||||
- Add terms and privacy policy to theme's demo site. [#343](https://github.com/mmistakes/minimal-mistakes/issues/343)
|
||||
- Update screenshots found in theme documentation.
|
||||
|
||||
## [3.2.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add [Discourse](https://www.discourse.org/) as a commenting provider. [#335](https://github.com/mmistakes/minimal-mistakes/pull/335)
|
||||
|
||||
## [3.2.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add support for image captions in Magnific Popup overlays via the [`gallery`](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) helper. [#334](https://github.com/mmistakes/minimal-mistakes/issues/334)
|
||||
|
||||
## [3.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.1)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Remove need for "double tapping" masthead menu links on iOS devices. [#315](https://github.com/mmistakes/minimal-mistakes/issues/315)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Add `ISSUE_TEMPLATE.md` for improve issue submission process.
|
||||
|
||||
## [3.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.0)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix missing category/tag links in post footer due to possible conflict with `site.tags` and `site.categories`. [#329](https://github.com/mmistakes/minimal-mistakes/issues/329#issuecomment-222375568)
|
||||
|
||||
## [3.1.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.8)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix `Liquid Exception: undefined method 'gsub' for nil:NilClass in _layouts/single.html` error when `page.title` is null. `<h1>` element is now conditional if `title: ` is not set for a `page` or collection item. [#312](https://github.com/mmistakes/minimal-mistakes/issues/312)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Remove duplicate `fa-twitter` and `fa-twitter-square` classes from `_utilities.scss`. [#302](https://github.com/mmistakes/minimal-mistakes/issues/302)
|
||||
|
||||
- Document installing additional Jekyll gem dependencies when using `gem "jekyll"` instead of `gem "github-pages"` to avoid any errors on run. [#305](https://github.com/mmistakes/minimal-mistakes/issues/305)
|
||||
|
||||
## [3.1.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.7)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add translation key for "Recent Posts" used in home page `index.html`. [#316](https://github.com/mmistakes/minimal-mistakes/pull/316)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Small fix to avoid underlying the whitespace between icons and related text when hovering. [#303](https://github.com/mmistakes/minimal-mistakes/pull/303)
|
||||
|
||||
## [3.1.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.6)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Update gem dependencies. Run `bundle` to update `Gemfile.lock`.
|
||||
|
||||
## [3.1.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.5)
|
||||
|
||||
### Maintenance
|
||||
|
||||
- Fix `www` and `https` links in author profile include [#293](https://github.com/mmistakes/minimal-mistakes/pull/293)
|
||||
|
||||
## [3.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.4)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add overlay_filter param to hero headers [#298](https://github.com/mmistakes/minimal-mistakes/pull/298)
|
||||
|
||||
## [3.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Improve `site.locale` documentation [#284](https://github.com/mmistakes/minimal-mistakes/issues/284)
|
||||
- Remove ProTip note about protocol-less `site.url` as it is an anti-pattern [#288](https://github.com/mmistakes/minimal-mistakes/issues/288)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix `og_image` URL in seo.html [#277](https://github.com/mmistakes/minimal-mistakes/issues/277)
|
||||
- Fix `author_profile` toggle when assigned in a `_layout` [#285](https://github.com/mmistakes/minimal-mistakes/issues/285)
|
||||
- Fix typo in `build:all` npm script [#283](https://github.com/mmistakes/minimal-mistakes/pull/283)
|
||||
- Fix URL typo documentation [#287](https://github.com/mmistakes/minimal-mistakes/issues/287)
|
||||
- SEO author bug. If `twitter.username` is set and `author.twitter` is `nil` bad things happen. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289)
|
||||
|
||||
## [3.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Explain how to use `nav_list` helper in [documentation](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list).
|
||||
- Reduce left/right padding on smaller screens to increase width of main content column.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix alignment issues with related posts [#273](https://github.com/mmistakes/minimal-mistakes/issues/273) and "Follow" button in author profile [#274](https://github.com/mmistakes/minimal-mistakes/issues/274).
|
||||
|
||||
## [3.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.1)
|
||||
|
||||
### Bug Fix
|
||||
|
||||
- Fixed reading time bug when `words_per_minute` wasn't set in `_config.yml` [#271](https://github.com/mmistakes/minimal-mistakes/issues/271)
|
||||
|
||||
## [3.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.0)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Updated [Font Awesome](https://fortawesome.github.io/Font-Awesome/whats-new/) to version 4.6.1
|
||||
- Added optional GitHub and Bitbucket links to footer if set on `site.author` in `_config.yml`.
|
||||
|
||||
### Bug Fixes
|
||||
- Fixed Bitbucket URL typo in author sidebar.
|
||||
|
||||
## [3.0.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.0.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Rebuilt the entire theme: layouts, includes, stylesheets, scripts, you name it.
|
||||
- Refreshed the look and feel while staying true to the original design of the theme (author sidebar/main content).
|
||||
- Replaced grid system with [Susy](http://susy.oddbird.net/).
|
||||
- Replaced Grunt tasks with `npm` scripts.
|
||||
- Removed Google Fonts and replaced with system fonts to improve performance (they can be [added back](https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/) if desired)
|
||||
- Greatly improved [theme documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/).
|
||||
- Increased the amount of sample posts, sample pages, and sample collections to throughly test the theme and edge-cases.
|
||||
- Moved all sample content and assets out of `master` to keep it as clean as possible for forking.
|
||||
- Added new layouts for `splash` pages, archives for [`jekyll-archives`](https://github.com/jekyll/jekyll-archives) if enabled, and [`compress.html`](https://github.com/penibelst/jekyll-compress-html) to improve performance.
|
||||
- Added taxonomy links to posts (tags and categories).
|
||||
- Added optional "reading time" meta data.
|
||||
- Improved Liquid used for Twitter Cards and Open Graph data in `<head>`.
|
||||
- Improved `gallery` include helper and added `feature_row` for use with splash page layout.
|
||||
- Added Keybase.io, author web URI, and Bitbucket optional links to sidebar.
|
||||
- Add `feed.xml` link to footer.
|
||||
- Added a [UI text data file](https://mmistakes.github.io/minimal-mistakes/docs/ui-text/) to easily change all text found in the theme.
|
||||
- Added LinkedIn to optional social share buttons.
|
||||
- Added Facebook, Google+, and custom commenting options in addition to Disqus.
|
||||
- Added optional breadcrumb links.
|
||||
|
||||
## [2.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.1)
|
||||
|
||||
## [2.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.0)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add support for Jekyll 3.0
|
||||
- Minor updates to syntax highlighting CSS and theme documentation
|
||||
|
||||
## [2.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Cleaner print styles that remove the top navigation, social sharing buttons, and other elements not needed when printed.
|
||||
|
||||
## [2.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add optional CodePen icon/url to author side bar [#156](https://github.com/mmistakes/minimal-mistakes/pull/156)
|
||||
- Documented Stackoverflow username explanation in `_config.yml` [#157](https://github.com/mmistakes/minimal-mistakes/pull/157)
|
||||
- Simplified Liquid in `post-index.html` to better handle year listings [#166](https://github.com/mmistakes/minimal-mistakes/pull/166)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Cleanup Facebook related Open Graph meta tags [#149](https://github.com/mmistakes/minimal-mistakes/issues/149)
|
||||
- Corrected minor typos [#158](https://github.com/mmistakes/minimal-mistakes/pull/158) [#175](https://github.com/mmistakes/minimal-mistakes/issues/175)
|
||||
|
||||
## [2.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.1)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add optional XING profile link to author sidebar
|
||||
- Include open graph meta tags for feature image (if assigned) [#149](https://github.com/mmistakes/minimal-mistakes/issues/149)
|
||||
- Create an include for feed footer
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Remove http protocol from Google search form on sample 404 page
|
||||
- Only show related posts if there are one or more available
|
||||
- Fix alignment of email address link in author sidebar
|
||||
|
||||
## [2.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.0)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add optional social sharing buttons ([#42](https://github.com/mmistakes/minimal-mistakes/issues/42))
|
||||
|
||||

|
||||
|
||||
- Add Soundcloud, YouTube ([#95](https://github.com/mmistakes/minimal-mistakes/pull/95)), Flickr ([#119](https://github.com/mmistakes/minimal-mistakes/pull/119)), and Weibo ([#116](https://github.com/mmistakes/minimal-mistakes/pull/116)) icons for use in author sidebar.
|
||||
- Fix typos in posts and documentation and remove references to Less
|
||||
- Include note about Octopress gem being optional
|
||||
- Post author override support extended to the Atom feed ([#71](https://github.com/mmistakes/minimal-mistakes/pull/71))
|
||||
- Only include email address in feed if specified in `_config.yml` or author `_data`
|
||||
- Wrap all page content in `#main` to harmonize article and post index styles ([#86](https://github.com/mmistakes/minimal-mistakes/issues/86))
|
||||
- Include new sample feature images for posts and pages
|
||||
- Table of contents improvements: fix collapse toggle, indent nested elements, show on small screens, and create an `_include` for reusing in posts and pages.
|
||||
- Include note about running Jekyll with `bundle exec` when using Bundler
|
||||
- Fix home page path in top navigation
|
||||
- Remove Google Authorship ([#120](https://github.com/mmistakes/minimal-mistakes/issues/120))
|
||||
- Remove duplicate author content that displayed in `div.article-author-bottom`
|
||||
- Removed unused `_sass/print.scss` styles
|
||||
- Improve comments in `.scss` files
|
||||
|
||||
## [2.0.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/v2.0)
|
||||
|
||||
## [1.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.3)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Added new icons and profile links for Stackoverflow, Dribbble, Pinterest, Foursquare, and Steam to the author bio sidebar.
|
||||
- Cleaned up the Kramdown auto table of contents styling to be more readable
|
||||
- Removed page width specific .less stylesheets and created mixins for easier updating
|
||||
- Removed Modernizr since it wasn't being used
|
||||
- Added pages to sitemap.xml
|
||||
- Added category: to rake new_post task
|
||||
- Minor typographic changes
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Corrected various broken links in README and Theme Setup.
|
||||
|
||||
## [1.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.1)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Cleaned up table of contents styling
|
||||
- Reworked top navigation to be a better experience on small screens. Nav items now display vertically when the menu button is tapped, revealing links with larger touch targets.
|
||||
|
||||

|
||||
|
||||
## [1.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.2.0)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Table weren't filling the entire width of the content container. They now scale at 100%. Thanks [@dhruvbhatia](https://github.com/dhruvbhatia)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Decreased spacing between Markdown footnotes
|
||||
- Removed dark background on footer
|
||||
- Removed UPPERCASE styling on post titles in the index listing
|
||||
|
||||
## [1.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.4)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix top navigation bug issue ([#10](https://github.com/mmistakes/minimal-mistakes/issues/10)) for real this time. Remember to clear your floats kids.
|
||||
|
||||
## [1.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.3)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix top navigation links that weren't click able on small viewports (Issue [#10](https://github.com/mmistakes/minimal-mistakes/issues/10)).
|
||||
- Remove line wrap from top navigation links that may span multiple lines.
|
||||
|
||||
## [1.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Added Grunt build script for compiling Less/JavaScript and optimizing image assets.
|
||||
- Added support for large image summary Twitter card.
|
||||
- Stylesheet adjustments
|
||||
|
||||
## [1.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.1)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Removed [Typeplate](http://typeplate.com/) styles. Was [causing issues with newer versions of Less](https://github.com/typeplate/typeplate.github.io/issues/108) and is no longer maintained.
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Added [image attribution](http://mmistakes.github.io/minimal-mistakes/theme-setup/#feature-images) for post and page feature images.
|
||||
- Added [404 page](http://mmistakes.github.io/minimal-mistakes/404.html).
|
||||
- Cleaned up various Less variables to better align with naming conventions used in other MM Jekyll themes.
|
||||
- Removed Chrome Frame references.
|
||||
- Added global CSS3 transitions to text and block elements.
|
||||
- Improved typography in a few places.
|
||||
|
||||
## [1.0.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.2)
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Google Analytics, Google Authorship, webmaster verifies, and Twitter card meta are now optional.
|
||||
|
||||
## [1.0.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.1)
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
@@ -1,27 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
# Hello! This is where you manage which Jekyll version is used to run.
|
||||
# When you want to use a different version, change it below, save the
|
||||
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
|
||||
#
|
||||
# bundle exec jekyll serve
|
||||
#
|
||||
# This will help ensure the proper Jekyll version is running.
|
||||
# Happy Jekylling!
|
||||
|
||||
gem "github-pages", group: :jekyll_plugins
|
||||
|
||||
# If you want to use Jekyll native, uncomment the line below.
|
||||
# To upgrade, run `bundle update`.
|
||||
|
||||
# gem "jekyll"
|
||||
|
||||
gem "wdm", "~> 0.1.0" if Gem.win_platform?
|
||||
|
||||
# If you have any plugins, put them here!
|
||||
group :jekyll_plugins do
|
||||
# gem "jekyll-archives"
|
||||
|
||||
gem 'jekyll-octicons'
|
||||
|
||||
end
|
||||
-155
@@ -1,155 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.7)
|
||||
i18n (~> 0.7)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.4.0)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.10.0)
|
||||
colorator (1.1.0)
|
||||
ethon (0.9.1)
|
||||
ffi (>= 1.3.0)
|
||||
execjs (2.7.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.9.14)
|
||||
ffi (1.9.14-x64-mingw32)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (2.1.0)
|
||||
github-pages (104)
|
||||
activesupport (= 4.2.7)
|
||||
github-pages-health-check (= 1.2.0)
|
||||
jekyll (= 3.3.0)
|
||||
jekyll-avatar (= 0.4.2)
|
||||
jekyll-coffeescript (= 1.0.1)
|
||||
jekyll-feed (= 0.8.0)
|
||||
jekyll-gist (= 1.4.0)
|
||||
jekyll-github-metadata (= 2.2.0)
|
||||
jekyll-mentions (= 1.2.0)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-redirect-from (= 0.11.0)
|
||||
jekyll-sass-converter (= 1.3.0)
|
||||
jekyll-seo-tag (= 2.1.0)
|
||||
jekyll-sitemap (= 0.12.0)
|
||||
jekyll-swiss (= 0.4.0)
|
||||
jemoji (= 0.7.0)
|
||||
kramdown (= 1.11.1)
|
||||
liquid (= 3.0.6)
|
||||
listen (= 3.0.6)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.0.0)
|
||||
rouge (= 1.11.1)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.2.0)
|
||||
addressable (~> 2.3)
|
||||
net-dns (~> 0.8)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 1.4)
|
||||
typhoeus (~> 0.7)
|
||||
html-pipeline (2.4.2)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
i18n (0.7.0)
|
||||
jekyll (3.3.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.4.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.0.1)
|
||||
coffee-script (~> 2.2)
|
||||
jekyll-feed (0.8.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-gist (1.4.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.2.0)
|
||||
jekyll (~> 3.1)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-octicons (3.0.1)
|
||||
jekyll (~> 3.1)
|
||||
octicons (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-redirect-from (0.11.0)
|
||||
jekyll (>= 2.0)
|
||||
jekyll-sass-converter (1.3.0)
|
||||
sass (~> 3.2)
|
||||
jekyll-seo-tag (2.1.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (0.12.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-swiss (0.4.0)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
jemoji (0.7.0)
|
||||
activesupport (~> 4.0)
|
||||
gemoji (~> 2.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0)
|
||||
json (1.8.3)
|
||||
kramdown (1.11.1)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.6)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.1.0)
|
||||
minima (2.0.0)
|
||||
minitest (5.9.1)
|
||||
multipart-post (2.0.0)
|
||||
net-dns (0.8.0)
|
||||
nokogiri (1.6.8.1)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
nokogiri (1.6.8.1-x64-mingw32)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
octicons (3.0.1)
|
||||
nokogiri (>= 1.6.3.1)
|
||||
octokit (4.4.1)
|
||||
sawyer (~> 0.7.0, >= 0.5.3)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (1.5.3)
|
||||
rb-fsevent (0.9.8)
|
||||
rb-inotify (0.9.7)
|
||||
ffi (>= 0.5.0)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.22)
|
||||
sawyer (0.7.0)
|
||||
addressable (>= 2.3.5, < 2.5)
|
||||
faraday (~> 0.8, < 0.10)
|
||||
terminal-table (1.7.3)
|
||||
unicode-display_width (~> 1.1.1)
|
||||
thread_safe (0.3.5)
|
||||
typhoeus (0.8.0)
|
||||
ethon (>= 0.8.0)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.1.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x64-mingw32
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
jekyll-octicons
|
||||
|
||||
BUNDLED WITH
|
||||
1.13.3
|
||||
@@ -1,21 +1,340 @@
|
||||
The MIT License (MIT)
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (c) 2016 Michael Rose
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Preamble
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
{description}
|
||||
Copyright (C) {year} {fullname}
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
{signature of Ty Coon}, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,5 @@
|
||||
# additional include paths necessary to compile the C++ library
|
||||
AM_CXXFLAGS = -I$(top_srcdir)/
|
||||
SUBDIRS = lib tests benchmarks
|
||||
|
||||
filelist: $(SUBDIRS)
|
||||
@@ -0,0 +1,44 @@
|
||||
This library provides data parallel C++ container classes with internal memory layout
|
||||
that is transformed to map efficiently to SIMD architectures. CSHIFT facilities
|
||||
are provided, similar to HPF and cmfortran, and user control is given over the mapping of
|
||||
array indices to both MPI tasks and SIMD processing elements.
|
||||
|
||||
* Identically shaped arrays then be processed with perfect data parallelisation.
|
||||
* Such identically shapped arrays are called conformable arrays.
|
||||
|
||||
The transformation is based on the observation that Cartesian array processing involves
|
||||
identical processing to be performed on different regions of the Cartesian array.
|
||||
|
||||
The library will (eventually) both geometrically decompose into MPI tasks and across SIMD lanes.
|
||||
|
||||
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but
|
||||
optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification
|
||||
for most programmers.
|
||||
|
||||
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
||||
Presently SSE2 (128 bit) AVX, AVX2 (256 bit) and IMCI and AVX512 (512 bit) targets are supported.
|
||||
|
||||
These are presented as
|
||||
|
||||
vRealF, vRealD, vComplexF, vComplexD
|
||||
|
||||
internal vector data types. These may be useful in themselves for other programmers.
|
||||
The corresponding scalar types are named
|
||||
|
||||
RealF, RealD, ComplexF, ComplexD
|
||||
|
||||
MPI parallelism is UNIMPLEMENTED and for now only OpenMP and SIMD parallelism is present in the library.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is are examples:
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -msse4" --enable-simd=SSE4
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx" --enable-simd=AVX1
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx2" --enable-simd=AVX2
|
||||
|
||||
./configure CXX=icpc CXXFLAGS="-std=c++11 -O3 -mmic" --enable-simd=AVX512 --host=none
|
||||
|
||||
|
||||
@@ -1,26 +1,50 @@
|
||||
GRID github pages.
|
||||
# Grid
|
||||
Data parallel C++ mathematical object library
|
||||
|
||||
This library provides data parallel C++ container classes with internal memory layout
|
||||
that is transformed to map efficiently to SIMD architectures. CSHIFT facilities
|
||||
are provided, similar to HPF and cmfortran, and user control is given over the mapping of
|
||||
array indices to both MPI tasks and SIMD processing elements.
|
||||
|
||||
## License
|
||||
* Identically shaped arrays then be processed with perfect data parallelisation.
|
||||
* Such identically shapped arrays are called conformable arrays.
|
||||
|
||||
The MIT License (MIT)
|
||||
The transformation is based on the observation that Cartesian array processing involves
|
||||
identical processing to be performed on different regions of the Cartesian array.
|
||||
|
||||
Copyright (c) 2016 Michael Rose
|
||||
The library will both geometrically decompose into MPI tasks and across SIMD lanes.
|
||||
Local vector loops are parallelised with OpenMP pragmas.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but
|
||||
optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification
|
||||
for most programmers.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
||||
Presently SSE4 (128 bit) AVX, AVX2 (256 bit) and IMCI and AVX512 (512 bit) targets are supported.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
These are presented as
|
||||
|
||||
vRealF, vRealD, vComplexF, vComplexD
|
||||
|
||||
internal vector data types. These may be useful in themselves for other programmers.
|
||||
The corresponding scalar types are named
|
||||
|
||||
RealF, RealD, ComplexF, ComplexD
|
||||
|
||||
MPI, OpenMP, and SIMD parallelism are present in the library.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
are examples:
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -msse4" --enable-simd=SSE4
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx" --enable-simd=AVX1
|
||||
|
||||
./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx2" --enable-simd=AVX2
|
||||
|
||||
./configure CXX=icpc CXXFLAGS="-std=c++11 -O3 -mmic" --enable-simd=AVX512 --host=none
|
||||
|
||||
|
||||
For developers:
|
||||
Use reconfigure_script in the scripts/ directory to create the autotools environment
|
||||
|
||||
@@ -0,0 +1,248 @@
|
||||
TODO:
|
||||
---------------
|
||||
Policies:
|
||||
|
||||
* Link smearing/boundary conds; Policy class based implementation ; framework more in place
|
||||
|
||||
* Support different boundary conditions (finite temp, chem. potential ... )
|
||||
|
||||
* Support different fermion representations?
|
||||
- contained entirely within the integrator presently
|
||||
|
||||
- Sign of force term.
|
||||
|
||||
- Reversibility test.
|
||||
|
||||
- Rename "Ta" as too unclear
|
||||
|
||||
- Lanczos
|
||||
|
||||
- Audit oIndex usage for cb behaviour
|
||||
|
||||
- Rectangle gauge actions.
|
||||
Iwasaki,
|
||||
Symanzik,
|
||||
... etc...
|
||||
|
||||
- Prepare multigrid for HMC. - Alternate setup schemes.
|
||||
|
||||
- Support for ILDG --- ugly, not done
|
||||
|
||||
- Flavour matrices?
|
||||
|
||||
- FFTnD ?
|
||||
|
||||
- Gparity; hand opt use template specialisation elegance to enable the optimised paths ?
|
||||
- Gparity force term; Gparity (R)HMC.
|
||||
- Random number state save restore
|
||||
- Mobius implementation clean up to rmove #if 0 stale code sequences
|
||||
- CG -- profile carefully, kernel fusion, whole CG performance measurements.
|
||||
|
||||
================================================================
|
||||
* Hacks and bug fixes to clean up and Audits
|
||||
================================================================
|
||||
|
||||
* Extract/merge/set cleanup ; too many variants; rationalise and call simpler ones
|
||||
|
||||
* Rewrite core tensor arithmetic support to be more systematic
|
||||
= Use #define repetitive sequences to minimise code, decrease line count by thousands possible,
|
||||
with more robust and maintainable implementation.
|
||||
|
||||
* Ensure we ET as much as possible; move unop functions into ET framework.
|
||||
- tests with expression args to all functions
|
||||
|
||||
* FIXME audit
|
||||
|
||||
* const audit
|
||||
|
||||
Insert/Extract
|
||||
* Replace vset with a call to merge.;
|
||||
* care in Gmerge,Gextract over vset .
|
||||
* extract / merge extra implementation removal
|
||||
* Optimise the extract/merge SIMD routines; Azusa??
|
||||
- I have collated into single location at least.
|
||||
- Need to use _mm_*insert/extract routines.
|
||||
|
||||
* Thread scaling tests Xeon, XeonPhi
|
||||
|
||||
Not sure of status of this -- reverify. Things are working nicely now though.
|
||||
|
||||
* Make the Tensor types and Complex etc... play more nicely.
|
||||
- TensorRemove is a hack, come up with a long term rationalised approach to Complex vs. Scalar<Scalar<Scalar<Complex > > >
|
||||
QDP forces use of "toDouble" to get back to non tensor scalar. This role is presently taken TensorRemove, but I
|
||||
want to introduce a syntax that does not require this.
|
||||
|
||||
- Reductions that contract indices on a site should always demote the tensor structure.
|
||||
norm2(), innerProduct.
|
||||
|
||||
- Result of Sum(), SliceSum // spatial sums
|
||||
trace, traceIndex etc.. do not.
|
||||
|
||||
- problem arises because "trace" returns Lattice<TComplex> moving everything down to Scalar,
|
||||
and then Sum and SliceSum to not remove the Scalars. This would be fixed if we
|
||||
template specialize the scalar scalar scalar sum and SliceSum, on the basis of being
|
||||
pure scalar.
|
||||
|
||||
======================================================================
|
||||
======================================================================
|
||||
======================================================================
|
||||
======================================================================
|
||||
RECENT
|
||||
---------------
|
||||
|
||||
- Clean up HMC -- DONE
|
||||
- LorentzScalar<GaugeField> gets Gauge link type (cleaner). -- DONE
|
||||
- Simplified the integrators a bit. -- DONE
|
||||
- Multi-timescale looks broken and operating on single timescale for now. -- DONE
|
||||
- pass GaugeField as template param. -- DONE
|
||||
- Reunitarise -- DONE
|
||||
- Force Gradient -- DONE
|
||||
- Prefer "RefreshInternal" or such like to "init" in naming -- DONE
|
||||
- Parallel io improvements -- DONE
|
||||
- Plaquette and link trace checks into nersc reader from the Grid_nersc_io.cc test. -- DONE
|
||||
|
||||
Done: Cayley, Partial , ContFrac force terms.
|
||||
|
||||
DONE
|
||||
- PseudoFermions
|
||||
=> generalise to non-const EE ; likely defer (??) (NOT DONE)
|
||||
Done:
|
||||
- TwoFlavour
|
||||
- TwoFlavourEvenOdd
|
||||
- TwoFlavourRatio
|
||||
- TwoFlavourRatioEvenOdd
|
||||
|
||||
Done:
|
||||
- OneFlavourRationalEvenOdd
|
||||
- OneFlavourRationalRatioEvenOdd
|
||||
- OneFlavourRationalRatio
|
||||
|
||||
Done
|
||||
=> Test DWF HMC
|
||||
- Fix a threading bug that has been introduced and prevents HMC running hybrid OMP mode
|
||||
|
||||
Done:
|
||||
- RNG filling from sparser grid, lower dim grid.
|
||||
|
||||
|
||||
DONE
|
||||
- MacroMagic -> virtual reader class.
|
||||
|
||||
*** Expression template engine: -- DONE
|
||||
|
||||
[ -- Norm2(expression) problem: introduce norm2 unary op, or Introduce conversion automatic from expression to Lattice<vobj>
|
||||
* Strong test for norm2, conj and all primitive types. -- tests/Grid_simd.cc is almost there
|
||||
* Implement where within expression template scheme.
|
||||
* Check for missing functionality - partially audited against QDP++ layout
|
||||
|
||||
// Unary functions
|
||||
// cos,sin, tan, acos, asin, cosh, acosh, tanh, sinh, // Scalar<vReal> only arg
|
||||
// exp, log, sqrt, fabs
|
||||
// transposeColor, transposeSpin,
|
||||
// adjColor, adjSpin,
|
||||
// copyMask.
|
||||
// localMaxAbs
|
||||
// Fourier transform equivalent.]
|
||||
|
||||
|
||||
* CovariantShift support -----Use a class to store gauge field? (parallel transport?)
|
||||
|
||||
-- coherent framework for implementing actions and their forces.
|
||||
Actions
|
||||
|
||||
DONE
|
||||
* Fermion
|
||||
- Wilson
|
||||
- Clover
|
||||
- DomainWall
|
||||
- Mobius
|
||||
- z-Mobius
|
||||
|
||||
|
||||
Algorithms (lots of reuse/port from BFM)
|
||||
* LinearOperator
|
||||
* LinearSolver
|
||||
* Polynomial
|
||||
* Eigen
|
||||
* CG
|
||||
* Pcg
|
||||
* Adef2
|
||||
* DeflCG
|
||||
* fPcg
|
||||
* MCR
|
||||
* HDCG
|
||||
* HMC,
|
||||
* Heatbath
|
||||
* Integrators, leapfrog, omelyan, force gradient etc...
|
||||
* etc..
|
||||
|
||||
Done
|
||||
* Pauli, SU subgroup, etc..
|
||||
|
||||
* su3 exponentiation & log etc.. [Jamie's code?]
|
||||
|
||||
======================================================================================================
|
||||
FUNCTIONALITY: it pleases me to keep track of things I have done (keeps me arguably sane)
|
||||
======================================================================================================
|
||||
|
||||
* Command line args for geometry, simd, etc. layout. Is it necessary to have -- DONE
|
||||
user pass these? Is this a QCD specific?
|
||||
|
||||
* Stencil -- DONE
|
||||
* Test infrastructure -- DONE
|
||||
* Fourspin, two spin project --- DONE
|
||||
* Dirac Gamma/Dirac structures ---- DONE
|
||||
* Conditional execution, where etc... -----DONE, simple test
|
||||
* Integer relational support -----DONE
|
||||
* Coordinate information, integers etc... -----DONE
|
||||
* Integer type padding/union to vector. -----DONE
|
||||
* LatticeCoordinate[mu] -----DONE
|
||||
* expose traceIndex, peekIndex, transposeIndex etc at the Lattice Level -- DONE
|
||||
* TraceColor, TraceSpin. ----- DONE (traceIndex<1>,traceIndex<2>, transposeIndex<1>,transposeIndex<2>)
|
||||
----- Implement mapping between traceColour and traceSpin and traceIndex<1/2>.
|
||||
* How to do U[mu] ... lorentz part of type structure or not. more like chroma if not. -- DONE
|
||||
|
||||
* Twospin/Fourspin/Gamma/Proj/Recon ----- DONE
|
||||
* norm2l is a hack. figure out syntax error and make this norm2 c.f. tests/Grid_gamma.cc -- DONE
|
||||
|
||||
* subdirs lib, tests ?? ----- DONE
|
||||
- lib/math
|
||||
- lib/cartesian
|
||||
- lib/cshift
|
||||
- lib/stencil
|
||||
- lib/communicator
|
||||
- lib/algorithms
|
||||
- lib/qcd
|
||||
- lib/io/ -- GridLog, GridIn, GridErr, GridDebug, GridMessage
|
||||
- lib/qcd/actions
|
||||
- lib/qcd/measurements
|
||||
|
||||
* Subset support, slice sums etc... -----DONE
|
||||
sliceSum(orthog)
|
||||
sum
|
||||
innerProduct
|
||||
norm2
|
||||
|
||||
* Subgrid Transferral -----DONE
|
||||
subBlock (coarseLattice,fineLattice)
|
||||
projectBlockBasis
|
||||
promoteBlockBasis
|
||||
|
||||
* random number generation ----- DONE
|
||||
|
||||
* Broadcast, reduction tests. innerProduct, localInnerProduct --- DONE
|
||||
|
||||
* I/O support
|
||||
* NERSC Lattice loading, plaquette test ------- DONE single node
|
||||
|
||||
* Controling std::cout ------- DONE
|
||||
|
||||
* Had to hack assignment to 1.0 in the tests/Grid_gamma test -- DONE
|
||||
* Reduce implemention is poor ; need threaded reductions; OMP isn't able to do it for generic objects. -- DONE
|
||||
* Bug in RNG with complex numbers ; only filling real values; need helper function -- DONE
|
||||
* Conformable test in Cshift routines. -- none needed ; there is only one
|
||||
* Conformable testing in expression templates -- DONE (recursive)
|
||||
|
||||
* Bug in SeedFixedIntegers gave same output on each site. -- DONE
|
||||
Implement and use lattice IO to verify this. -- cout for lattice types DONE
|
||||
|
||||
-244
@@ -1,244 +0,0 @@
|
||||
# Welcome to Jekyll!
|
||||
#
|
||||
# This config file is meant for settings that affect your entire site, values
|
||||
# which you are expected to set up once and rarely need to edit after that.
|
||||
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
||||
# `jekyll serve`. If you change this file, please restart the server process.
|
||||
|
||||
# Site Settings
|
||||
locale : "en"
|
||||
title : "GRID"
|
||||
title_separator : "|"
|
||||
name : "University of Edinburgh"
|
||||
authors : "Peter Boyle, Guido Cossu, Antonin Portelli, Azusa Yamaguchi"
|
||||
description : "Data parallel C++ mathematical object library."
|
||||
url : 'https://paboyle.github.io' # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
|
||||
baseurl : '/Grid' # the subpath of your site, e.g. "/blog"
|
||||
repository : "paboyle/Grid"
|
||||
teaser : # filename of teaser fallback teaser image placed in /images/, .e.g. "500x300.png"
|
||||
# breadcrumbs : false # true, false (default)
|
||||
words_per_minute : 200
|
||||
comments:
|
||||
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
|
||||
disqus:
|
||||
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
|
||||
discourse:
|
||||
server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
|
||||
facebook:
|
||||
# https://developers.facebook.com/docs/plugins/comments
|
||||
appid :
|
||||
num_posts : # 5 (default)
|
||||
colorscheme : # "light" (default), "dark"
|
||||
staticman:
|
||||
allowedFields : ['name', 'email', 'url', 'message']
|
||||
branch : # "master", "gh-pages"
|
||||
commitMessage : "New comment."
|
||||
filename : comment-{@timestamp}
|
||||
format : "yml"
|
||||
moderation : true
|
||||
path : "_data/comments/{options.slug}"
|
||||
requiredFields : ['name', 'email', 'message']
|
||||
transforms:
|
||||
email : "md5"
|
||||
generatedFields:
|
||||
date:
|
||||
type : "date"
|
||||
options:
|
||||
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||
atom_feed:
|
||||
path : # blank (default) uses feed.xml
|
||||
|
||||
# SEO Related
|
||||
google_site_verification :
|
||||
bing_site_verification :
|
||||
alexa_site_verification :
|
||||
yandex_site_verification :
|
||||
|
||||
# Social Sharing
|
||||
twitter:
|
||||
username :
|
||||
facebook:
|
||||
username :
|
||||
app_id :
|
||||
publisher :
|
||||
og_image : # Open Graph/Twitter default site image
|
||||
# For specifying social profiles
|
||||
# - https://developers.google.com/structured-data/customize/social-profiles
|
||||
social:
|
||||
type : # Person or Organization (defaults to Person)
|
||||
name : # If the user or organization name differs from the site's name
|
||||
links: # An array of links to social media profiles
|
||||
|
||||
# Analytics
|
||||
analytics:
|
||||
provider : false # false (default), "google", "google-universal", "custom"
|
||||
google:
|
||||
tracking_id :
|
||||
|
||||
|
||||
# Site Author
|
||||
author:
|
||||
name : "PPT Group"
|
||||
avatar : "bio-photo.jpg"
|
||||
bio : "Some info"
|
||||
location : "Edinburgh"
|
||||
email : "guido.cossu@ed.ac.uk"
|
||||
uri :
|
||||
bitbucket :
|
||||
codepen :
|
||||
dribbble :
|
||||
flickr :
|
||||
facebook :
|
||||
foursquare :
|
||||
github :
|
||||
google_plus :
|
||||
keybase :
|
||||
instagram :
|
||||
lastfm :
|
||||
linkedin :
|
||||
pinterest :
|
||||
soundcloud :
|
||||
stackoverflow : # "123456/username" (the last part of your profile url, e.g. http://stackoverflow.com/users/123456/username)
|
||||
steam :
|
||||
tumblr :
|
||||
twitter :
|
||||
vine :
|
||||
weibo :
|
||||
xing :
|
||||
youtube :
|
||||
|
||||
|
||||
# Reading Files
|
||||
include:
|
||||
- .htaccess
|
||||
- _pages
|
||||
exclude:
|
||||
- "*.sublime-project"
|
||||
- "*.sublime-workspace"
|
||||
- vendor
|
||||
- .asset-cache
|
||||
- .bundle
|
||||
- .jekyll-assets-cache
|
||||
- .sass-cache
|
||||
- assets/js/plugins
|
||||
- assets/js/_main.js
|
||||
- assets/js/vendor
|
||||
- Capfile
|
||||
- CHANGELOG
|
||||
- config
|
||||
- Gemfile
|
||||
- Gruntfile.js
|
||||
- gulpfile.js
|
||||
- LICENSE
|
||||
- log
|
||||
- node_modules
|
||||
- package.json
|
||||
- Rakefile
|
||||
- README
|
||||
- tmp
|
||||
keep_files:
|
||||
- .git
|
||||
- .svn
|
||||
encoding: "utf-8"
|
||||
markdown_ext: "markdown,mkdown,mkdn,mkd,md"
|
||||
|
||||
|
||||
# Conversion
|
||||
markdown: kramdown
|
||||
highlighter: rouge
|
||||
lsi: false
|
||||
excerpt_separator: "\n\n"
|
||||
incremental: false
|
||||
|
||||
|
||||
# Markdown Processing
|
||||
kramdown:
|
||||
input: GFM
|
||||
hard_wrap: false
|
||||
auto_ids: true
|
||||
footnote_nr: 1
|
||||
entity_output: as_char
|
||||
toc_levels: 1..6
|
||||
smart_quotes: lsquo,rsquo,ldquo,rdquo
|
||||
enable_coderay: false
|
||||
|
||||
|
||||
# Sass/SCSS
|
||||
sass:
|
||||
sass_dir: _sass
|
||||
style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
|
||||
|
||||
|
||||
# Outputting
|
||||
permalink: /:categories/:title/
|
||||
paginate: 5 # amount of posts to show
|
||||
paginate_path: /page:num/
|
||||
timezone: # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
|
||||
|
||||
# Plugins
|
||||
gems:
|
||||
- jekyll-paginate
|
||||
- jekyll-sitemap
|
||||
- jekyll-gist
|
||||
- jekyll-feed
|
||||
- jekyll-octicons
|
||||
- jemoji
|
||||
|
||||
# mimic GitHub Pages with --safe
|
||||
whitelist:
|
||||
- jekyll-paginate
|
||||
- jekyll-sitemap
|
||||
- jekyll-gist
|
||||
- jekyll-feed
|
||||
- jekyll-octicons
|
||||
- jemoji
|
||||
|
||||
|
||||
# Archives
|
||||
# Type
|
||||
# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)
|
||||
# - Jekyll Archives plugin archive pages ~> type: jekyll-archives
|
||||
# Path (examples)
|
||||
# - Archive page should exist at path when using Liquid method or you can
|
||||
# expect broken links (especially with breadcrumbs enabled)
|
||||
# - <base_path>/tags/my-awesome-tag/index.html ~> path: /tags/
|
||||
# - <base_path/categories/my-awesome-category/index.html ~> path: /categories/
|
||||
# - <base_path/my-awesome-category/index.html ~> path: /
|
||||
category_archive:
|
||||
type: liquid
|
||||
path: /categories/
|
||||
tag_archive:
|
||||
type: liquid
|
||||
path: /tags/
|
||||
# https://github.com/jekyll/jekyll-archives
|
||||
# jekyll-archives:
|
||||
# enabled:
|
||||
# - categories
|
||||
# - tags
|
||||
# layouts:
|
||||
# category: archive-taxonomy
|
||||
# tag: archive-taxonomy
|
||||
# permalinks:
|
||||
# category: /categories/:name/
|
||||
# tag: /tags/:name/
|
||||
|
||||
|
||||
# HTML Compression
|
||||
# - http://jch.penibelst.de/
|
||||
compress_html:
|
||||
clippings: all
|
||||
ignore:
|
||||
envs: development
|
||||
|
||||
|
||||
output: web
|
||||
defaults:
|
||||
-
|
||||
scope:
|
||||
path: ""
|
||||
type: "pages"
|
||||
values:
|
||||
layout: "single"
|
||||
comments: false
|
||||
search: true
|
||||
@@ -1,231 +0,0 @@
|
||||
# Welcome to Jekyll!
|
||||
#
|
||||
# This config file is meant for settings that affect your entire site, values
|
||||
# which you are expected to set up once and rarely need to edit after that.
|
||||
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
||||
# `jekyll serve`. If you change this file, please restart the server process.
|
||||
|
||||
# Site Settings
|
||||
locale : "en"
|
||||
title : "GRID"
|
||||
title_separator : "|"
|
||||
name : "Our team"
|
||||
description : "Data parallel C++ mathematical object library."
|
||||
url : 'http://127.0.0.1:4000' # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
|
||||
baseurl : '/Grid' # the subpath of your site, e.g. "/blog"
|
||||
repository : "paboyle/Grid"
|
||||
teaser : # filename of teaser fallback teaser image placed in /images/, .e.g. "500x300.png"
|
||||
# breadcrumbs : false # true, false (default)
|
||||
words_per_minute : 200
|
||||
comments:
|
||||
provider : # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "custom"
|
||||
disqus:
|
||||
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
|
||||
discourse:
|
||||
server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
|
||||
facebook:
|
||||
# https://developers.facebook.com/docs/plugins/comments
|
||||
appid :
|
||||
num_posts : # 5 (default)
|
||||
colorscheme : # "light" (default), "dark"
|
||||
staticman:
|
||||
allowedFields : ['name', 'email', 'url', 'message']
|
||||
branch : # "master", "gh-pages"
|
||||
commitMessage : "New comment."
|
||||
filename : comment-{@timestamp}
|
||||
format : "yml"
|
||||
moderation : true
|
||||
path : "_data/comments/{options.slug}"
|
||||
requiredFields : ['name', 'email', 'message']
|
||||
transforms:
|
||||
email : "md5"
|
||||
generatedFields:
|
||||
date:
|
||||
type : "date"
|
||||
options:
|
||||
format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
|
||||
atom_feed:
|
||||
path : # blank (default) uses feed.xml
|
||||
|
||||
# SEO Related
|
||||
google_site_verification :
|
||||
bing_site_verification :
|
||||
alexa_site_verification :
|
||||
yandex_site_verification :
|
||||
|
||||
# Social Sharing
|
||||
twitter:
|
||||
username :
|
||||
facebook:
|
||||
username :
|
||||
app_id :
|
||||
publisher :
|
||||
og_image : # Open Graph/Twitter default site image
|
||||
# For specifying social profiles
|
||||
# - https://developers.google.com/structured-data/customize/social-profiles
|
||||
social:
|
||||
type : # Person or Organization (defaults to Person)
|
||||
name : # If the user or organization name differs from the site's name
|
||||
links: # An array of links to social media profiles
|
||||
|
||||
# Analytics
|
||||
analytics:
|
||||
provider : false # false (default), "google", "google-universal", "custom"
|
||||
google:
|
||||
tracking_id :
|
||||
|
||||
|
||||
# Site Author
|
||||
author:
|
||||
name : "PPT Group"
|
||||
avatar : "bio-photo.jpg"
|
||||
bio : "Our group is amazing."
|
||||
location : "Edinburgh"
|
||||
email : "guido.cossu@ed.ac.uk"
|
||||
uri :
|
||||
bitbucket :
|
||||
codepen :
|
||||
dribbble :
|
||||
flickr :
|
||||
facebook :
|
||||
foursquare :
|
||||
github :
|
||||
google_plus :
|
||||
keybase :
|
||||
instagram :
|
||||
lastfm :
|
||||
linkedin :
|
||||
pinterest :
|
||||
soundcloud :
|
||||
stackoverflow : # "123456/username" (the last part of your profile url, e.g. http://stackoverflow.com/users/123456/username)
|
||||
steam :
|
||||
tumblr :
|
||||
twitter :
|
||||
vine :
|
||||
weibo :
|
||||
xing :
|
||||
youtube :
|
||||
|
||||
|
||||
# Reading Files
|
||||
include:
|
||||
- .htaccess
|
||||
- _pages
|
||||
exclude:
|
||||
- "*.sublime-project"
|
||||
- "*.sublime-workspace"
|
||||
- vendor
|
||||
- .asset-cache
|
||||
- .bundle
|
||||
- .jekyll-assets-cache
|
||||
- .sass-cache
|
||||
- assets/js/plugins
|
||||
- assets/js/_main.js
|
||||
- assets/js/vendor
|
||||
- Capfile
|
||||
- CHANGELOG
|
||||
- config
|
||||
- Gemfile
|
||||
- Gruntfile.js
|
||||
- gulpfile.js
|
||||
- LICENSE
|
||||
- log
|
||||
- node_modules
|
||||
- package.json
|
||||
- Rakefile
|
||||
- README
|
||||
- tmp
|
||||
keep_files:
|
||||
- .git
|
||||
- .svn
|
||||
encoding: "utf-8"
|
||||
markdown_ext: "markdown,mkdown,mkdn,mkd,md"
|
||||
|
||||
|
||||
# Conversion
|
||||
markdown: kramdown
|
||||
highlighter: rouge
|
||||
lsi: false
|
||||
excerpt_separator: "\n\n"
|
||||
incremental: false
|
||||
|
||||
|
||||
# Markdown Processing
|
||||
kramdown:
|
||||
input: GFM
|
||||
hard_wrap: false
|
||||
auto_ids: true
|
||||
footnote_nr: 1
|
||||
entity_output: as_char
|
||||
toc_levels: 1..6
|
||||
smart_quotes: lsquo,rsquo,ldquo,rdquo
|
||||
enable_coderay: false
|
||||
|
||||
|
||||
# Sass/SCSS
|
||||
sass:
|
||||
sass_dir: _sass
|
||||
style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
|
||||
|
||||
|
||||
# Outputting
|
||||
permalink: /:categories/:title/
|
||||
paginate: 5 # amount of posts to show
|
||||
paginate_path: /page:num/
|
||||
timezone: # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
|
||||
|
||||
# Plugins
|
||||
gems:
|
||||
- jekyll-paginate
|
||||
- jekyll-sitemap
|
||||
- jekyll-gist
|
||||
- jekyll-feed
|
||||
- jekyll-octicons
|
||||
- jemoji
|
||||
|
||||
# mimic GitHub Pages with --safe
|
||||
whitelist:
|
||||
- jekyll-paginate
|
||||
- jekyll-sitemap
|
||||
- jekyll-gist
|
||||
- jekyll-feed
|
||||
- jekyll-octicons
|
||||
- jemoji
|
||||
|
||||
|
||||
# Archives
|
||||
# Type
|
||||
# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)
|
||||
# - Jekyll Archives plugin archive pages ~> type: jekyll-archives
|
||||
# Path (examples)
|
||||
# - Archive page should exist at path when using Liquid method or you can
|
||||
# expect broken links (especially with breadcrumbs enabled)
|
||||
# - <base_path>/tags/my-awesome-tag/index.html ~> path: /tags/
|
||||
# - <base_path/categories/my-awesome-category/index.html ~> path: /categories/
|
||||
# - <base_path/my-awesome-category/index.html ~> path: /
|
||||
category_archive:
|
||||
type: liquid
|
||||
path: /categories/
|
||||
tag_archive:
|
||||
type: liquid
|
||||
path: /tags/
|
||||
# https://github.com/jekyll/jekyll-archives
|
||||
# jekyll-archives:
|
||||
# enabled:
|
||||
# - categories
|
||||
# - tags
|
||||
# layouts:
|
||||
# category: archive-taxonomy
|
||||
# tag: archive-taxonomy
|
||||
# permalinks:
|
||||
# category: /categories/:name/
|
||||
# tag: /tags/:name/
|
||||
|
||||
|
||||
# HTML Compression
|
||||
# - http://jch.penibelst.de/
|
||||
compress_html:
|
||||
clippings: all
|
||||
ignore:
|
||||
envs: development
|
||||
@@ -1,9 +0,0 @@
|
||||
# /_data/authors.yml
|
||||
|
||||
Guido Cossu:
|
||||
name: "Guido Cossu"
|
||||
uri: "http://www.google.com"
|
||||
email: "guido.cossu@ed.ac.uk"
|
||||
bio: "Senior researcher at Higgs Centre"
|
||||
avatar: "bio-photo-2.jpg"
|
||||
twitter: "coppolachan"
|
||||
@@ -1,122 +0,0 @@
|
||||
# main links links
|
||||
|
||||
main:
|
||||
- title: "Documentation"
|
||||
icon: "octicon octicon-book vertical-middle"
|
||||
url: /docs/
|
||||
|
||||
- title: "Quick-start guide"
|
||||
url: /docs/quick-start-guide/
|
||||
|
||||
- title: "About"
|
||||
url: /about/
|
||||
|
||||
- title: "GPL License"
|
||||
url: /license/
|
||||
|
||||
|
||||
docs:
|
||||
|
||||
- title:
|
||||
output: pdf
|
||||
type: frontmatter
|
||||
children:
|
||||
- title:
|
||||
url: /titlepage.html
|
||||
output: pdf
|
||||
type: frontmatter
|
||||
- title:
|
||||
url: /tocpage.html
|
||||
output: pdf
|
||||
type: frontmatter
|
||||
|
||||
- title: "Introduction"
|
||||
output: pdf
|
||||
children:
|
||||
- title: "GRID"
|
||||
url: /docs/
|
||||
output: pdf
|
||||
|
||||
- title: Getting Started
|
||||
output: pdf
|
||||
children:
|
||||
- title: "Quick-Start Guide"
|
||||
url: /docs/quick-start-guide/
|
||||
output: web, pdf
|
||||
- title: "Communication interfaces"
|
||||
url: /docs/comm_interfaces/
|
||||
output: web, pdf
|
||||
- title: "Architecture targets"
|
||||
url: /docs/simd_targets/
|
||||
output: web, pdf
|
||||
- title: "Building on Intel and AMD targets"
|
||||
url: /docs/general_build/
|
||||
output: web, pdf
|
||||
|
||||
- title: Using GRID
|
||||
output: pdf
|
||||
children:
|
||||
- title: "Running on KNL"
|
||||
url: /docs/running_knl/
|
||||
output: web, pdf
|
||||
|
||||
- title: Development
|
||||
output: pdf
|
||||
children:
|
||||
- title: "Execution model"
|
||||
url: /docs/execution-model/
|
||||
output: web, pdf
|
||||
- title: "Reporting an issue"
|
||||
url: /docs/bug_report/
|
||||
output: web, pdf
|
||||
- title: "Continuous integration"
|
||||
url: /docs/travis/
|
||||
output: web, pdf
|
||||
|
||||
- title: API description
|
||||
output: pdf
|
||||
children:
|
||||
- title: "Introduction"
|
||||
url: /docs/API/introduction.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Tensor classes"
|
||||
url: /docs/API/tensor_classes.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Vectorisation"
|
||||
url: /docs/API/vectorisation.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Coordinates"
|
||||
url: /docs/API/coordinates.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Grids"
|
||||
url: /docs/API/grids.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Lattice containers"
|
||||
url: /docs/API/lattice_containers.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Random number generators"
|
||||
url: /docs/API/random_number_generators.html
|
||||
output: web, pdf
|
||||
disable: "no"
|
||||
- title: "Lattice classes"
|
||||
url: /docs/lattice/
|
||||
disable: "yes"
|
||||
|
||||
|
||||
- title: "Lattice theories"
|
||||
output: pdf
|
||||
children:
|
||||
- title : "Theories"
|
||||
url: /docs/theories/
|
||||
disable: "yes"
|
||||
output: web
|
||||
- title: "HMC"
|
||||
url: /docs/theories/hmc/
|
||||
disable: "no"
|
||||
output: web,pdf
|
||||
@@ -1,355 +0,0 @@
|
||||
# User interface text and labels
|
||||
|
||||
# English (default)
|
||||
# -----------------
|
||||
en: &DEFAULT_EN
|
||||
page : "Page"
|
||||
pagination_previous : "Previous"
|
||||
pagination_next : "Next"
|
||||
breadcrumb_home_label : "Home"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "On This Page"
|
||||
ext_link_label : "Direct Link"
|
||||
less_than : "less than"
|
||||
minute_read : "minute read"
|
||||
share_on_label : "Share on"
|
||||
meta_label :
|
||||
tags_label : "Tags:"
|
||||
categories_label : "Categories:"
|
||||
date_label : "Updated:"
|
||||
comments_label : "Leave a Comment"
|
||||
comments_title : "Comments"
|
||||
more_label : "Learn More"
|
||||
related_label : "You May Also Enjoy"
|
||||
follow_label : "Follow:"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Powered by"
|
||||
website_label : "Website"
|
||||
email_label : "Email"
|
||||
recent_posts : "Recent Posts"
|
||||
undefined_wpm : "Undefined parameter words_per_minute at _config.yml"
|
||||
comment_form_info : "Your email address will not be published. Required fields are marked"
|
||||
comment_form_comment_label : "Comment"
|
||||
comment_form_md_info : "Markdown is supported."
|
||||
comment_form_name_label : "Name"
|
||||
comment_form_email_label : "Email address"
|
||||
comment_form_website_label : "Website (optional)"
|
||||
comment_btn_submit : "Submit Comment"
|
||||
comment_btn_submitted : "Submitted"
|
||||
comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved."
|
||||
comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again."
|
||||
loading_label : "Loading..."
|
||||
en-US:
|
||||
<<: *DEFAULT_EN
|
||||
en-CA:
|
||||
<<: *DEFAULT_EN
|
||||
en-GB:
|
||||
<<: *DEFAULT_EN
|
||||
en-AU:
|
||||
<<: *DEFAULT_EN
|
||||
|
||||
# Spanish
|
||||
# --------------
|
||||
es: &DEFAULT_ES
|
||||
page : "Página"
|
||||
pagination_previous : "Anterior"
|
||||
pagination_next : "Siguiente"
|
||||
breadcrumb_home_label : "Inicio"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "Contenidos"
|
||||
ext_link_label : "Enlace"
|
||||
less_than : "menos de"
|
||||
minute_read : "minuto de lectura"
|
||||
share_on_label : "Compartir"
|
||||
meta_label :
|
||||
tags_label : "Etiquetas:"
|
||||
categories_label : "Categorías:"
|
||||
date_label : "Actualizado:"
|
||||
comments_label : "Comentar"
|
||||
comments_title :
|
||||
more_label : "Ver más"
|
||||
related_label : "Podrías ver también"
|
||||
follow_label : "Seguir:"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Powered by"
|
||||
website_label : "Sitio web"
|
||||
email_label : "Email"
|
||||
recent_posts : "Entradas recientes"
|
||||
undefined_wpm : "Parametro words_per_minute (Palabras por minuto) no definido en _config.yml"
|
||||
comment_form_info :
|
||||
comment_form_comment_label :
|
||||
comment_form_md_info :
|
||||
comment_form_name_label :
|
||||
comment_form_email_label :
|
||||
comment_form_website_label :
|
||||
comment_btn_submit :
|
||||
comment_btn_submitted :
|
||||
comment_success_msg :
|
||||
comment_error_msg :
|
||||
loading_label :
|
||||
es-ES:
|
||||
<<: *DEFAULT_ES
|
||||
es-CO:
|
||||
<<: *DEFAULT_ES
|
||||
|
||||
# French
|
||||
# -----------------
|
||||
fr: &DEFAULT_FR
|
||||
page : "Page"
|
||||
pagination_previous : "Précédent"
|
||||
pagination_next : "Suivant"
|
||||
breadcrumb_home_label : "Accueil"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "Sur cette page"
|
||||
ext_link_label : "Lien direct"
|
||||
less_than : "plus petit que"
|
||||
minute_read : "minute de lecture"
|
||||
share_on_label : "Partager sur"
|
||||
meta_label :
|
||||
tags_label : "Tags :"
|
||||
categories_label : "Catégories :"
|
||||
date_label : "Mis à jour :"
|
||||
comments_label : "Laisser un commentaire"
|
||||
comments_title :
|
||||
more_label : "Lire plus"
|
||||
related_label : "Vous pourriez aimer"
|
||||
follow_label : "Suivez moi"
|
||||
feed_label : "Flux"
|
||||
powered_by : "Propulsé par"
|
||||
website_label : "Site"
|
||||
email_label : "Email"
|
||||
recent_posts : "Posts récents"
|
||||
undefined_wpm : "Le paramètre words_per_minute n'est pas défini dans _config.yml"
|
||||
comments_title : "Commentaires"
|
||||
comment_form_info : "Votre adresse email ne sera pas visible. Les champs obligatoires sont marqués"
|
||||
comment_form_comment_label : "Commentaire"
|
||||
comment_form_md_info : "Markdown est supporté."
|
||||
comment_form_name_label : "Nom"
|
||||
comment_form_email_label : "Adresse mail"
|
||||
comment_form_website_label : "Site web (optionnel)"
|
||||
comment_btn_submit : "Envoyer"
|
||||
comment_btn_submitted : "Envoyé"
|
||||
comment_success_msg : "Merci pour votre comentaire, il sera visible sur le site une fois approuvé."
|
||||
comment_error_msg : "Désolé, une erreur est survenue lors de la soumission. Vérifiez que les champs obligatoires ont été remplis et réessayez."
|
||||
loading_label : "Chargement..."
|
||||
fr-FR:
|
||||
<<: *DEFAULT_FR
|
||||
fr-BE:
|
||||
<<: *DEFAULT_FR
|
||||
fr-CH:
|
||||
<<: *DEFAULT_FR
|
||||
|
||||
# Turkish
|
||||
# -----------------
|
||||
tr: &DEFAULT_TR
|
||||
page : "Sayfa"
|
||||
pagination_previous : "Önceki"
|
||||
pagination_next : "Sonraki"
|
||||
breadcrumb_home_label : "Ana Sayfa"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "İçindekiler"
|
||||
ext_link_label : "Doğrudan Bağlantı"
|
||||
less_than : "Şu süreden az: "
|
||||
minute_read : "dakika tahmini okuma süresi"
|
||||
share_on_label : "Paylaş"
|
||||
meta_label :
|
||||
tags_label : "Etiketler:"
|
||||
categories_label : "Kategoriler:"
|
||||
date_label : "Güncelleme tarihi:"
|
||||
comments_label : "Yorum yapın"
|
||||
comments_title :
|
||||
more_label : "Daha fazlasını öğrenin"
|
||||
related_label : "Bunlar ilginizi çekebilir:"
|
||||
follow_label : "Takip et:"
|
||||
feed_label : "RSS"
|
||||
powered_by : "Emeği geçenler: "
|
||||
website_label : "Web sayfası"
|
||||
email_label : "E-posta"
|
||||
recent_posts : "Son yazılar"
|
||||
undefined_wpm : "_config.yml dosyasında tanımlanmamış words_per_minute parametresi"
|
||||
comment_form_info :
|
||||
comment_form_comment_label :
|
||||
comment_form_md_info :
|
||||
comment_form_name_label :
|
||||
comment_form_email_label :
|
||||
comment_form_website_label :
|
||||
comment_btn_submit :
|
||||
comment_btn_submitted :
|
||||
comment_success_msg :
|
||||
comment_error_msg :
|
||||
loading_label :
|
||||
tr-TR:
|
||||
<<: *DEFAULT_TR
|
||||
|
||||
# Portuguese
|
||||
# -----------------
|
||||
pt: &DEFAULT_PT
|
||||
page : "Página"
|
||||
pagination_previous : "Anterior"
|
||||
pagination_next : "Seguinte"
|
||||
breadcrumb_home_label : "Início"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "Nesta Página"
|
||||
ext_link_label : "Link Direto"
|
||||
less_than : "menos de"
|
||||
minute_read : "minutos de leitura"
|
||||
share_on_label : "Partilhar no"
|
||||
meta_label :
|
||||
tags_label : "Etiquetas:"
|
||||
categories_label : "Categorias:"
|
||||
date_label : "Atualizado:"
|
||||
comments_label : "Deixe um Comentário"
|
||||
comments_title : "Comentários"
|
||||
more_label : "Saber mais"
|
||||
related_label : "Também pode gostar de"
|
||||
follow_label : "Siga:"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Feito com"
|
||||
website_label : "Site"
|
||||
email_label : "Email"
|
||||
recent_posts : "Artigos Recentes"
|
||||
undefined_wpm : "Parâmetro words_per_minute não definido em _config.yml"
|
||||
comment_form_info : "O seu endereço email não será publicado. Os campos obrigatórios estão assinalados"
|
||||
comment_form_comment_label : "Comentário"
|
||||
comment_form_md_info : "Markdown é suportado."
|
||||
comment_form_name_label : "Nome"
|
||||
comment_form_email_label : "Endereço Email"
|
||||
comment_form_website_label : "Site (opcional)"
|
||||
comment_btn_submit : "Sumbeter Comentário"
|
||||
comment_btn_submitted : "Submetido"
|
||||
comment_success_msg : "Obrigado pelo seu comentário! Será visível no site logo que aprovado."
|
||||
comment_error_msg : "Lamento, ocorreu um erro na sua submissão. Por favor verifique se todos os campos obrigatórios estão corretamente preenchidos e tente novamente."
|
||||
loading_label : "A carregar..."
|
||||
# Brazilian Portuguese
|
||||
pt-BR:
|
||||
page : "Página"
|
||||
pagination_previous : "Anterior"
|
||||
pagination_next : "Próxima"
|
||||
breadcrumb_home_label : "Home"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "Nesta página"
|
||||
ext_link_label : "Link direto"
|
||||
less_than : "meno que"
|
||||
minute_read : "minutos de leitura"
|
||||
share_on_label : "Compartilhe em"
|
||||
meta_label :
|
||||
tags_label : "Tags:"
|
||||
categories_label : "Categorias:"
|
||||
date_label : "Atualizado em:"
|
||||
comments_label : "Deixe um comentário"
|
||||
comments_title :
|
||||
more_label : "Aprenda Mais"
|
||||
related_label : "Você Talvez Goste Também"
|
||||
follow_label : "Acompanhe em"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Feito com"
|
||||
website_label : "Site"
|
||||
email_label : "Email"
|
||||
recent_posts : "Postagens recentes"
|
||||
undefined_wpm : "Parâmetro indefinido em word_per_minute no _config.yml"
|
||||
comment_form_info :
|
||||
comment_form_comment_label :
|
||||
comment_form_md_info :
|
||||
comment_form_name_label :
|
||||
comment_form_email_label :
|
||||
comment_form_website_label :
|
||||
comment_btn_submit :
|
||||
comment_btn_submitted :
|
||||
comment_success_msg :
|
||||
comment_error_msg :
|
||||
loading_label :
|
||||
pt-PT:
|
||||
<<: *DEFAULT_PT
|
||||
|
||||
# Italian
|
||||
# -----------------
|
||||
it: &DEFAULT_IT
|
||||
page : "Pagina"
|
||||
pagination_previous : "Precedente"
|
||||
pagination_next : "Prossima"
|
||||
breadcrumb_home_label : "Home"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "Indice della pagina"
|
||||
ext_link_label : "Link"
|
||||
less_than : "meno di"
|
||||
minute_read : "minuto/i di lettura"
|
||||
share_on_label : "Condividi"
|
||||
meta_label :
|
||||
tags_label : "Tags:"
|
||||
categories_label : "Categorie:"
|
||||
date_label : "Aggiornato:"
|
||||
comments_label : "Scrivi un commento"
|
||||
comments_title :
|
||||
more_label : "Scopri di più"
|
||||
related_label : "Potrebbe Piacerti Anche"
|
||||
follow_label : "Segui:"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Powered by"
|
||||
website_label : "Website"
|
||||
email_label : "Email"
|
||||
recent_posts : "Articoli Recenti"
|
||||
undefined_wpm : "Parametro words_per_minute non definito in _config.yml"
|
||||
comment_form_info : "Il tuo indirizzo email non sarà pubblicato. Sono segnati i campi obbligatori"
|
||||
comment_form_comment_label : "Commenta"
|
||||
comment_form_md_info : "Il linguaggio Markdown è supportato"
|
||||
comment_form_name_label : "Nome"
|
||||
comment_form_email_label : "Indirizzo email"
|
||||
comment_form_website_label : "Sito Web (opzionale)"
|
||||
comment_btn_submit : "Invia commento"
|
||||
comment_btn_submitted : "Inviato"
|
||||
comment_success_msg : "Grazie per il tuo commento! Verrà visualizzato nel sito una volta che sarà approvato."
|
||||
comment_error_msg : "C'è stato un errore con il tuo invio. Assicurati che tutti i campi richiesti siano stati completati e riprova."
|
||||
loading_label : "Caricamento..."
|
||||
it-IT:
|
||||
<<: *DEFAULT_IT
|
||||
|
||||
# Chinese (zh-CN Chinese - China)
|
||||
# -----------------
|
||||
zh: &DEFAULT_ZH
|
||||
page : "页面"
|
||||
pagination_previous : "向前"
|
||||
pagination_next : "向后"
|
||||
breadcrumb_home_label : "首页"
|
||||
breadcrumb_separator : "/"
|
||||
toc_label : "在本页上"
|
||||
ext_link_label : "直接链接"
|
||||
less_than : "少于"
|
||||
minute_read : "分钟 阅读"
|
||||
share_on_label : "分享"
|
||||
meta_label :
|
||||
tags_label : "标签:"
|
||||
categories_label : "分类:"
|
||||
date_label : "最新的:"
|
||||
comments_label : "留下评论"
|
||||
comments_title : "评论"
|
||||
more_label : "了解更多"
|
||||
related_label : "猜您还喜欢"
|
||||
follow_label : "关注:"
|
||||
feed_label : "Feed"
|
||||
powered_by : "Powered by"
|
||||
website_label : "网站"
|
||||
email_label : "Email"
|
||||
recent_posts : "最新文章"
|
||||
undefined_wpm : "Undefined parameter words_per_minute at _config.yml"
|
||||
comment_form_info : "Your email address will not be published. Required fields are marked"
|
||||
comment_form_comment_label : "Comment"
|
||||
comment_form_md_info : "Markdown is supported."
|
||||
comment_form_name_label : "Name"
|
||||
comment_form_email_label : "Email address"
|
||||
comment_form_website_label : "Website (optional)"
|
||||
comment_btn_submit : "Submit Comment"
|
||||
comment_btn_submitted : "Submitted"
|
||||
comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved."
|
||||
comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again."
|
||||
loading_label : "Loading..."
|
||||
zh-CN:
|
||||
<<: *DEFAULT_ZH
|
||||
zh-HK:
|
||||
<<: *DEFAULT_ZH
|
||||
zh-SG:
|
||||
<<: *DEFAULT_ZH
|
||||
zh-TW:
|
||||
<<: *DEFAULT_ZH
|
||||
|
||||
# Another locale
|
||||
# --------------
|
||||
@@ -1,3 +0,0 @@
|
||||
<!-- start custom analytics snippet -->
|
||||
|
||||
<!-- end custom analytics snippet -->
|
||||
@@ -1,9 +0,0 @@
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', '{{ site.analytics.google.tracking_id }}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
@@ -1,11 +0,0 @@
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', '{{ site.analytics.google.tracking_id }}']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
@@ -1,12 +0,0 @@
|
||||
{% if site.analytics.provider and page.analytics != false %}
|
||||
|
||||
{% case site.analytics.provider %}
|
||||
{% when "google" %}
|
||||
{% include /analytics-providers/google.html %}
|
||||
{% when "google-universal" %}
|
||||
{% include /analytics-providers/google-universal.html %}
|
||||
{% when "custom" %}
|
||||
{% include /analytics-providers/custom.html %}
|
||||
{% endcase %}
|
||||
|
||||
{% endif %}
|
||||
@@ -1,40 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if post.header.teaser %}
|
||||
{% capture teaser %}{{ post.header.teaser }}{% endcapture %}
|
||||
{% else %}
|
||||
{% assign teaser = site.teaser %}
|
||||
{% endif %}
|
||||
|
||||
{% if post.id %}
|
||||
{% assign title = post.title | markdownify | remove: "<p>" | remove: "</p>" %}
|
||||
{% else %}
|
||||
{% assign title = post.title %}
|
||||
{% endif %}
|
||||
|
||||
<div class="{{ include.type | default: "list" }}__item">
|
||||
<article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
|
||||
{% if include.type == "grid" and teaser %}
|
||||
<div class="archive__item-teaser">
|
||||
<img src=
|
||||
{% if teaser contains "://" %}
|
||||
"{{ teaser }}"
|
||||
{% else %}
|
||||
"{{ teaser | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
alt="">
|
||||
</div>
|
||||
{% endif %}
|
||||
<h2 class="archive__item-title" itemprop="headline">
|
||||
{% if post.link %}
|
||||
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ base_path }}{{ post.url }}" rel="permalink"><i class="fa fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
|
||||
{% else %}
|
||||
<a href="{{ base_path }}{{ post.url }}" rel="permalink">{{ title }}</a>
|
||||
{% endif %}
|
||||
</h2>
|
||||
{% if post.read_time %}
|
||||
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
|
||||
{% endif %}
|
||||
{% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
|
||||
</article>
|
||||
</div>
|
||||
@@ -1,102 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.author and site.data.authors[page.author] %}
|
||||
{% assign author = site.data.authors[page.author] %}{% else %}{% assign author = site.author %}
|
||||
{% endif %}
|
||||
|
||||
<div itemscope itemtype="http://schema.org/Person">
|
||||
|
||||
<div class="author__avatar">
|
||||
{% if author.avatar contains "://" %}
|
||||
<img src="{{ author.avatar }}" alt="{{ author.name }}">
|
||||
{% else %}
|
||||
<img src="{{ author.avatar | prepend: "/images/" | prepend: base_path }}" class="author__avatar" alt="{{ author.name }}">
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="author__content">
|
||||
<h3 class="author__name">{{ author.name }}</h3>
|
||||
{% if author.bio %}<p class="author__bio">{{ author.bio }}</p>{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="author__urls-wrapper">
|
||||
<button class="btn btn--inverse">{{ site.data.ui-text[site.locale].follow_label | remove: ":" | default: "Follow" }}</button>
|
||||
<ul class="author__urls social-icons">
|
||||
{% if author.location %}
|
||||
<li><i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> {{ author.location }}</li>
|
||||
{% endif %}
|
||||
{% if author.uri %}
|
||||
<li><a href="{{ author.uri }}"><i class="fa fa-fw fa-chain" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].website_label | default: "Website" }}</a></li>
|
||||
{% endif %}
|
||||
{% if author.email %}
|
||||
<li><a href="mailto:{{ author.email }}"><i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].email_label | default: "Email" }}</a></li>
|
||||
{% endif %}
|
||||
{% if author.keybase %}
|
||||
<li><a href="https://keybase.io/{{ author.keybase }}"><i class="fa fa-fw fa-key" aria-hidden="true"></i> Keybase</a></li>
|
||||
{% endif %}
|
||||
{% if author.twitter %}
|
||||
<li><a href="https://twitter.com/{{ author.twitter }}"><i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter</a></li>
|
||||
{% endif %}
|
||||
{% if author.facebook %}
|
||||
<li><a href="https://www.facebook.com/{{ author.facebook }}"><i class="fa fa-fw fa-facebook-square" aria-hidden="true"></i> Facebook</a></li>
|
||||
{% endif %}
|
||||
{% if author.google_plus %}
|
||||
<li><a href="https://plus.google.com/+{{ author.google_plus }}"><i class="fa fa-fw fa-google-plus-square" aria-hidden="true"></i> Google+</a></li>
|
||||
{% endif %}
|
||||
{% if author.linkedin %}
|
||||
<li><a href="https://www.linkedin.com/in/{{ author.linkedin }}"><i class="fa fa-fw fa-linkedin-square" aria-hidden="true"></i> LinkedIn</a></li>
|
||||
{% endif %}
|
||||
{% if author.xing %}
|
||||
<li><a href="https://www.xing.com/profile/{{ author.xing }}"><i class="fa fa-fw fa-xing-square" aria-hidden="true"></i> XING</a></li>
|
||||
{% endif %}
|
||||
{% if author.instagram %}
|
||||
<li><a href="https://instagram.com/{{ author.instagram }}"><i class="fa fa-fw fa-instagram" aria-hidden="true"></i> Instagram</a></li>
|
||||
{% endif %}
|
||||
{% if author.tumblr %}
|
||||
<li><a href="https://{{ author.tumblr }}.tumblr.com"><i class="fa fa-fw fa-tumblr-square" aria-hidden="true"></i> Tumblr</a></li>
|
||||
{% endif %}
|
||||
{% if author.bitbucket %}
|
||||
<li><a href="https://bitbucket.org/{{ author.bitbucket }}"><i class="fa fa-fw fa-bitbucket" aria-hidden="true"></i> Bitbucket</a></li>
|
||||
{% endif %}
|
||||
{% if author.github %}
|
||||
<li><a href="https://github.com/{{ author.github }}"><i class="fa fa-fw fa-github" aria-hidden="true"></i> Github</a></li>
|
||||
{% endif %}
|
||||
{% if author.stackoverflow %}
|
||||
<li><a href="https://www.stackoverflow.com/users/{{ author.stackoverflow }}"><i class="fa fa-fw fa-stack-overflow" aria-hidden="true"></i> Stackoverflow</a></li>
|
||||
{% endif %}
|
||||
{% if author.lastfm %}
|
||||
<li><a href="https://last.fm/user/{{ author.lastfm }}"><i class="fa fa-fw fa-lastfm-square" aria-hidden="true"></i> Last.fm</a></li>
|
||||
{% endif %}
|
||||
{% if author.dribbble %}
|
||||
<li><a href="https://dribbble.com/{{ author.dribbble }}"><i class="fa fa-fw fa-dribbble" aria-hidden="true"></i> Dribbble</a></li>
|
||||
{% endif %}
|
||||
{% if author.pinterest %}
|
||||
<li><a href="https://www.pinterest.com/{{ author.pinterest }}"><i class="fa fa-fw fa-pinterest" aria-hidden="true"></i> Pinterest</a></li>
|
||||
{% endif %}
|
||||
{% if author.foursquare %}
|
||||
<li><a href="https://foursquare.com/{{ author.foursquare }}"><i class="fa fa-fw fa-foursquare" aria-hidden="true"></i> Foursquare</a></li>
|
||||
{% endif %}
|
||||
{% if author.steam %}
|
||||
<li><a href="https://steamcommunity.com/id/{{ author.steam }}"><i class="fa fa-fw fa-steam-square" aria-hidden="true"></i> Steam</a></li>
|
||||
{% endif %}
|
||||
{% if author.youtube %}
|
||||
<li><a href="https://www.youtube.com/user/{{ author.youtube }}"><i class="fa fa-fw fa-youtube-square" aria-hidden="true"></i> YouTube</a></li>
|
||||
{% endif %}
|
||||
{% if author.soundcloud %}
|
||||
<li><a href="https://soundcloud.com/{{ author.soundcloud }}"><i class="fa fa-fw fa-soundcloud" aria-hidden="true"></i> Soundcloud</a></li>
|
||||
{% endif %}
|
||||
{% if author.weibo %}
|
||||
<li><a href="https://www.weibo.com/{{ author.weibo }}"><i class="fa fa-fw fa-weibo" aria-hidden="true"></i> Weibo</a></li>
|
||||
{% endif %}
|
||||
{% if author.flickr %}
|
||||
<li><a href="https://www.flickr.com/{{ author.flickr }}"><i class="fa fa-fw fa-flickr" aria-hidden="true"></i> Flickr</a></li>
|
||||
{% endif %}
|
||||
{% if author.codepen %}
|
||||
<li><a href="https://codepen.io/{{ author.codepen }}"><i class="fa fa-fw fa-codepen" aria-hidden="true"></i> CodePen</a></li>
|
||||
{% endif %}
|
||||
{% if author.vine %}
|
||||
<li><a href="https://vine.co/u/{{ author.vine }}"><i class="fa fa-fw fa-vine" aria-hidden="true"></i> Vine</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,5 +0,0 @@
|
||||
{% if site.url %}
|
||||
{% assign base_path = site.url | append: site.baseurl %}
|
||||
{% else %}
|
||||
{% assign base_path = site.github.url %}
|
||||
{% endif %}
|
||||
@@ -1,41 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% case site.categories.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if page.collection != 'posts' %}
|
||||
{% assign path_type = nil %}
|
||||
{% assign crumb_path = '/' %}
|
||||
{% else %}
|
||||
{% assign crumb_path = site.categories.path %}
|
||||
{% endif %}
|
||||
|
||||
<nav class="breadcrumbs">
|
||||
<ol itemscope itemtype="http://schema.org/BreadcrumbList">
|
||||
{% assign crumbs = page.url | split: '/' %}
|
||||
{% assign i = 1 %}
|
||||
{% for crumb in crumbs offset: 1 %}
|
||||
{% if forloop.first %}
|
||||
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
|
||||
<a href="{{ base_path }}/" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
|
||||
<meta itemprop="position" content="{{ i }}" />
|
||||
</li>
|
||||
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
|
||||
{% endif %}
|
||||
{% if forloop.last %}
|
||||
<li class="current">{{ page.title }}</li>
|
||||
{% else %}
|
||||
{% assign i = i | plus: 1 %}
|
||||
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
|
||||
<a href="{{ base_path }}{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
|
||||
<meta itemprop="position" content="{{ i }}" />
|
||||
</li>
|
||||
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</nav>
|
||||
@@ -1,3 +0,0 @@
|
||||
<!--[if lt IE 9]>
|
||||
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
|
||||
<![endif]-->
|
||||
@@ -1,28 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% case site.category_archive.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if site.category_archive.path %}
|
||||
{% comment %}
|
||||
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
|
||||
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
|
||||
{% endcomment %}
|
||||
{% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}#{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
|
||||
{% assign category_hashes = (page_categories | split: ',' | sort:0) %}
|
||||
|
||||
<p class="page__taxonomy">
|
||||
<strong><i class="fa fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
|
||||
<span itemprop="keywords">
|
||||
{% for hash in category_hashes %}
|
||||
{% assign keyValue = hash | split: '#' %}
|
||||
{% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
|
||||
<a href="{{ base_path }}{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
|
||||
{% endfor %}
|
||||
</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
@@ -1,22 +0,0 @@
|
||||
<article id="comment{{ include.index }}" class="js-comment comment" itemprop="comment" itemscope itemtype="http://schema.org/Comment">
|
||||
<div class="comment__avatar-wrapper">
|
||||
<img class="comment__avatar" src="https://www.gravatar.com/avatar/{{ include.email }}?d=mm&s=80">
|
||||
</div>
|
||||
<div class="comment__content-wrapper">
|
||||
<h3 class="comment__author" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
{% unless include.url == blank %}
|
||||
<span itemprop="name"><a rel="external nofollow" itemprop="url" href="{{ include.url }}">{{ include.name }}</a></span>
|
||||
{% else %}
|
||||
<span itemprop="name">{{ include.name }}</span>
|
||||
{% endunless %}
|
||||
</h3>
|
||||
<p class="comment__date">
|
||||
{% if include.date %}
|
||||
{% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
|
||||
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %d, %Y at %I:%M %p" }}</time>
|
||||
{% if include.index %}</a>{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
<div itemprop="text">{{ include.message | markdownify }}</div>
|
||||
</div>
|
||||
</article>
|
||||
@@ -1,3 +0,0 @@
|
||||
<!-- start custom comments snippet -->
|
||||
|
||||
<!-- end custom comments snippet -->
|
||||
@@ -1,14 +0,0 @@
|
||||
{% if site.comments.discourse.server %}
|
||||
{% include base_path %}
|
||||
{% capture canonical %}{{ base_path }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
|
||||
<script type="text/javascript">
|
||||
DiscourseEmbed = { discourseUrl: '//{{ site.comments.discourse.server }}/',
|
||||
discourseEmbedUrl: '{{ canonical }}' };
|
||||
(function () {
|
||||
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
|
||||
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the comments powered by [Discourse](http://forum.beta-europe.org/c/beta/website).</a></noscript>
|
||||
{% endif %}
|
||||
@@ -1,22 +0,0 @@
|
||||
{% if site.comments.disqus.shortname %}
|
||||
<script type="text/javascript">
|
||||
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
||||
var disqus_shortname = '{{ site.comments.disqus.shortname }}';
|
||||
|
||||
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||
(function() {
|
||||
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
||||
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||
})();
|
||||
|
||||
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||
(function () {
|
||||
var s = document.createElement('script'); s.async = true;
|
||||
s.type = 'text/javascript';
|
||||
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
|
||||
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
|
||||
}());
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||
{% endif %}
|
||||
@@ -1,8 +0,0 @@
|
||||
<div id="fb-root"></div>
|
||||
<script>(function(d, s, id) {
|
||||
var js, fjs = d.getElementsByTagName(s)[0];
|
||||
if (d.getElementById(id)) return;
|
||||
js = d.createElement(s); js.id = id;
|
||||
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5{% if site.comments.facebook.appid %}&appId={{ site.comments.facebook.appid }}{% endif %}";
|
||||
fjs.parentNode.insertBefore(js, fjs);
|
||||
}(document, 'script', 'facebook-jssdk'));</script>
|
||||
@@ -1,2 +0,0 @@
|
||||
<script async type="text/javascript" src="//apis.google.com/js/plusone.js?callback=gpcb"></script>
|
||||
<noscript>Please enable JavaScript to view the <a href="https://plus.google.com/">comments powered by Google+.</a></noscript>
|
||||
@@ -1,18 +0,0 @@
|
||||
{% if site.comments.provider and page.comments %}
|
||||
|
||||
{% case site.comments.provider %}
|
||||
{% when "disqus" %}
|
||||
{% include /comments-providers/disqus.html %}
|
||||
{% when "discourse" %}
|
||||
{% include /comments-providers/discourse.html %}
|
||||
{% when "facebook" %}
|
||||
{% include /comments-providers/facebook.html %}
|
||||
{% when "google-plus" %}
|
||||
{% include /comments-providers/google-plus.html %}
|
||||
{% when "staticman" %}
|
||||
{% include /comments-providers/staticman.html %}
|
||||
{% when "custom" %}
|
||||
{% include /comments-providers/custom.html %}
|
||||
{% endcase %}
|
||||
|
||||
{% endif %}
|
||||
@@ -1,42 +0,0 @@
|
||||
{% if site.repository and site.staticman.branch %}
|
||||
<script>
|
||||
(function ($) {
|
||||
var $comments = $('.js-comments');
|
||||
|
||||
$('#new_comment').submit(function () {
|
||||
var form = this;
|
||||
|
||||
$(form).addClass('disabled');
|
||||
$('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
|
||||
|
||||
$.ajax({
|
||||
type: $(this).attr('method'),
|
||||
url: $(this).attr('action'),
|
||||
data: $(this).serialize(),
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
success: function (data) {
|
||||
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--danger');
|
||||
$('.page__comments-form .js-notice').addClass('notice--success');
|
||||
showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err);
|
||||
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--success');
|
||||
$('.page__comments-form .js-notice').addClass('notice--danger');
|
||||
showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
|
||||
$(form).removeClass('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function showAlert(message) {
|
||||
$('.page__comments-form .js-notice').removeClass('hidden');
|
||||
$('.page__comments-form .js-notice-text').html(message);
|
||||
}
|
||||
})(jQuery);
|
||||
</script>
|
||||
{% endif %}
|
||||
@@ -1,82 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<div class="page__comments">
|
||||
{% capture comments_label %}{{ site.data.ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %}
|
||||
{% case site.comments.provider %}
|
||||
{% when "disqus" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section id="disqus_thread"></section>
|
||||
{% when "facebook" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section class="fb-comments" data-href="{{ base_path }}{{ page.url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
|
||||
{% when "google-plus" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section class="g-comments" data-href="{{ base_path }}{{ page.url }}" data-first_party_property="BLOGGER" data-view_type="FILTERED_POSTMOD">Loading Google+ Comments ...</section>
|
||||
{% when "staticman" %}
|
||||
<section id="comments">
|
||||
{% if site.repository and site.staticman.branch %}
|
||||
<!-- Start static comments -->
|
||||
<div class="js-comments">
|
||||
{% if site.data.comments[page.slug] %}
|
||||
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
|
||||
{% assign comments = site.data.comments[page.slug] | sort %}
|
||||
|
||||
{% for comment in comments %}
|
||||
{% assign email = comment[1].email %}
|
||||
{% assign name = comment[1].name %}
|
||||
{% assign url = comment[1].url %}
|
||||
{% assign date = comment[1].date %}
|
||||
{% assign message = comment[1].message %}
|
||||
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- End static comments -->
|
||||
|
||||
<!-- Start new comment form -->
|
||||
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
|
||||
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
|
||||
<form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/{{ site.repository }}/{{ site.staticman.branch }}">
|
||||
<div class="form__spinner">
|
||||
<i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
|
||||
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
|
||||
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
|
||||
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
|
||||
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
|
||||
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
|
||||
</fieldset>
|
||||
<fieldset class="hidden" style="display: none;">
|
||||
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
|
||||
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
|
||||
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
|
||||
</fieldset>
|
||||
<!-- Start comment form alert messaging -->
|
||||
<p class="hidden js-notice">
|
||||
<strong class="js-notice-text"></strong>
|
||||
</p>
|
||||
<!-- End comment form alert messaging -->
|
||||
<fieldset>
|
||||
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
<!-- End new comment form -->
|
||||
{% endif %}
|
||||
</section>
|
||||
{% when "custom" %}
|
||||
<section id="comments"></section>
|
||||
{% endcase %}
|
||||
</div>
|
||||
@@ -1,52 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if include.id %}
|
||||
{% assign feature_row = page.[include.id] %}
|
||||
{% else %}
|
||||
{% assign feature_row = page.feature_row %}
|
||||
{% endif %}
|
||||
|
||||
<div class="feature__wrapper">
|
||||
|
||||
{% for f in feature_row %}
|
||||
|
||||
{% if f.url contains "://" %}
|
||||
{% capture f_url %}{{ f.url }}{% endcapture %}
|
||||
{% else %}
|
||||
{% capture f_url %}{{ f.url | prepend: base_path }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
<div class="feature__item{% if include.type %}--{{ include.type }}{% endif %}">
|
||||
<div class="archive__item">
|
||||
{% if f.image_path %}
|
||||
<div class="archive__item-teaser">
|
||||
<img src=
|
||||
{% if f.image_path contains "://" %}
|
||||
"{{ f.image_path }}"
|
||||
{% else %}
|
||||
"{{ f.image_path | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
alt="{% if f.alt %}{{ f.alt }}{% endif %}">
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="archive__item-body">
|
||||
{% if f.title %}
|
||||
<h2 class="archive__item-title">{{ f.title }}</h2>
|
||||
{% endif %}
|
||||
|
||||
{% if f.excerpt %}
|
||||
<div class="archive__item-excerpt">
|
||||
{{ f.excerpt | markdownify }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if f.url %}
|
||||
<p><a href="{{ f_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
@@ -1,24 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<div class="page__footer-follow">
|
||||
<ul class="social-icons">
|
||||
{% if site.data.ui-text[site.locale].follow_label %}
|
||||
<li><strong>{{ site.data.ui-text[site.locale].follow_label }}</strong></li>
|
||||
{% endif %}
|
||||
{% if site.twitter.username %}
|
||||
<li><a href="https://twitter.com/{{ site.twitter.username }}"><i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter</a></li>
|
||||
{% endif %}
|
||||
{% if site.facebook.username %}
|
||||
<li><a href="https://facebook.com/{{ site.facebook.username }}"><i class="fa fa-fw fa-facebook-square" aria-hidden="true"></i> Facebook</a></li>
|
||||
{% endif %}
|
||||
{% if site.author.github %}
|
||||
<li><a href="http://github.com/{{ site.author.github }}"><i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub</a></li>
|
||||
{% endif %}
|
||||
{% if site.author.bitbucket %}
|
||||
<li><a href="http://bitbucket.org/{{ site.author.bitbucket }}"><i class="fa fa-fw fa-bitbucket" aria-hidden="true"></i> Bitbucket</a></li>
|
||||
{% endif %}
|
||||
<li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ base_path }}/feed.xml{% endif %}"><i class="fa fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="page__footer-copyright">© {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
|
||||
@@ -1,3 +0,0 @@
|
||||
<!-- start custom footer snippets -->
|
||||
|
||||
<!-- end custom footer snippets -->
|
||||
@@ -1,49 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if include.id %}
|
||||
{% assign gallery = page.[include.id] %}
|
||||
{% else %}
|
||||
{% assign gallery = page.gallery %}
|
||||
{% endif %}
|
||||
|
||||
{% if gallery.size == 2 %}
|
||||
{% assign gallery_layout = 'half' %}
|
||||
{% elsif gallery.size >= 3 %}
|
||||
{% assign gallery_layout = 'third' %}
|
||||
{% else %}
|
||||
{% assign gallery_layout = '' %}
|
||||
{% endif %}
|
||||
|
||||
<figure class="{{ gallery_layout }} {{ include.class }}">
|
||||
{% for img in gallery %}
|
||||
{% if img.url %}
|
||||
<a href=
|
||||
{% if img.url contains "://" %}
|
||||
"{{ img.url }}"
|
||||
{% else %}
|
||||
"{{ img.url | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
{% if img.title %}title="{{ img.title }}"{% endif %}
|
||||
>
|
||||
<img src=
|
||||
{% if img.image_path contains "://" %}
|
||||
"{{ img.image_path }}"
|
||||
{% else %}
|
||||
"{{ img.image_path | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
|
||||
</a>
|
||||
{% else %}
|
||||
<img src=
|
||||
{% if img.image_path contains "://" %}
|
||||
"{{ img.image_path }}"
|
||||
{% else %}
|
||||
"{{ img.image_path | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if include.caption %}
|
||||
<figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
@@ -1,47 +0,0 @@
|
||||
<!--
|
||||
# Jekyll Group-By-Array 0.1.0
|
||||
# https://github.com/mushishi78/jekyll-group-by-array
|
||||
# © 2015 Max White <mushishi78@gmail.com>
|
||||
# MIT License
|
||||
-->
|
||||
|
||||
<!-- Initialize -->
|
||||
{% assign __empty_array = '' | split: ',' %}
|
||||
{% assign group_names = __empty_array %}
|
||||
{% assign group_items = __empty_array %}
|
||||
|
||||
<!-- Map -->
|
||||
{% assign __names = include.collection | map: include.field %}
|
||||
|
||||
<!-- Flatten -->
|
||||
{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
|
||||
|
||||
<!-- Uniq -->
|
||||
{% assign __names = __names | sort %}
|
||||
{% for name in __names | sort %}
|
||||
|
||||
<!-- If not equal to previous then it must be unique as sorted -->
|
||||
{% unless name == previous %}
|
||||
|
||||
<!-- Push to group_names -->
|
||||
{% assign group_names = group_names | push: name %}
|
||||
{% endunless %}
|
||||
|
||||
{% assign previous = name %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<!-- group_items -->
|
||||
{% for name in group_names %}
|
||||
|
||||
<!-- Collect if contains -->
|
||||
{% assign __item = __empty_array %}
|
||||
{% for __element in include.collection %}
|
||||
{% if __element[include.field] contains name %}
|
||||
{% assign __item = __item | push: __element %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<!-- Push to group_items -->
|
||||
{% assign group_items = group_items | push: __item %}
|
||||
{% endfor %}
|
||||
@@ -1,22 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
{% include seo.html %}
|
||||
|
||||
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ base_path }}/feed.xml{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
|
||||
|
||||
<!-- http://t.co/dKP3o1e -->
|
||||
<meta name="HandheldFriendly" content="True">
|
||||
<meta name="MobileOptimized" content="320">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<script>
|
||||
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
|
||||
</script>
|
||||
|
||||
<!-- For all browsers -->
|
||||
<link rel="stylesheet" href="{{ base_path }}/assets/css/main.css">
|
||||
<link rel="stylesheet" href="{{ base_path }}/assets/icons/octicons/font/octicons.min.css">
|
||||
|
||||
<meta http-equiv="cleartype" content="on">
|
||||
@@ -1,6 +0,0 @@
|
||||
<!-- start custom head snippets -->
|
||||
|
||||
<!-- insert favicons. use http://realfavicongenerator.net/ -->
|
||||
<link rel='shortcut icon' type='image/x-icon' href='{{ site.baseurl }}/images/favicon-32x32.png' />
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -1,38 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="{% if page.summary %}{{ page.summary | strip_html | strip_newlines | truncate: 160 }}{% endif %}">
|
||||
<meta name="keywords" content="{{page.tags}}{% if page.tags %}, {% endif %} {{page.keywords}}">
|
||||
<title>{% if page.homepage == true %} {{site.title}} {% elsif page.title %}{{ page.title }}{% endif %}</title>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="{{ "/css/customstyles.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{ "/css/printstyles.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{ "/css/font-awesome.min.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{site.url}}/{{site.baseurl}}/css/pygments/{{site.pygments-css}}.css">
|
||||
|
||||
<!--
|
||||
<link rel="stylesheet" href="{{ "/css/bootstrap.min.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{ "/css/modern-business.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{ "/css/theme-blue.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
<link rel="stylesheet" href="{{ "/css/syntax.css" | prepend: site.baseurl | prepend: site.url }}">
|
||||
/-->
|
||||
|
||||
<script>
|
||||
Prince.addScriptFunc("datestamp", function() {
|
||||
return "PDF last generated: {{ site.time | date: '%B %d, %Y' }}";
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
Prince.addScriptFunc("guideName", function() {
|
||||
return "{{site.title}} User Guide";
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
|
||||
<script type="text/javascript" src="{{ base_path }}/assets/js/ConfigMathJax.js"></script>
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{% capture imagePath %}/{{ include.name }}{% endcapture %}
|
||||
{% if include.caption %}
|
||||
<figure>
|
||||
<img src="{{ site.baseurl }}/images{{ imagePath }}" {% if include.alt %} alt="{{ include.alt }}" {% endif %} {% if include.width %} width="{{ include.width }}" style="display: block; margin-left: auto; margin-right: auto" {% endif %}/>
|
||||
<figcaption>{{ include.caption }}</figcaption>
|
||||
</figure>
|
||||
{% else %}
|
||||
<img src="{{ site.baseurl }}/images{{ imagePath }}" {% if include.alt %} alt="{{ include.alt }}" {% endif %} {% if include.width %} width="{{ include.width }}" style="display: block; margin-left: auto; margin-right: auto" {% endif %}/>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<div class="masthead">
|
||||
<div class="masthead__inner-wrap">
|
||||
<div class="masthead__menu">
|
||||
<nav id="site-nav" class="greedy-nav">
|
||||
<button><div class="navicon"></div></button>
|
||||
<ul class="visible-links">
|
||||
<li class="masthead__menu-item masthead__menu-item--lg"><a href="{{ base_path }}/">{{ site.title }}</a></li>
|
||||
{% for link in site.data.navigation.main %}
|
||||
{% if link.url contains 'http' %}
|
||||
{% assign domain = '' %}
|
||||
{% else %}
|
||||
{% assign domain = base_path %}
|
||||
{% endif %}
|
||||
<li class="masthead__menu-item"><a href="{{ domain }}{{ link.url }}"><span class="{{ link.icon }}"></span> {{ link.title }}</a></li>
|
||||
{% endfor %}
|
||||
<li class="masthead__menu-item"><a href="https://github.com/paboyle/Grid" title="Github repository page"><span class="mega-octicon octicon-mark-github vertical-middle"></span></a></li>
|
||||
</ul>
|
||||
<ul class="hidden-links hidden"></ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,52 +0,0 @@
|
||||
{% include base_path %}
|
||||
{% assign navigation = site.data.navigation[include.nav] %}
|
||||
|
||||
<nav class="nav__list">
|
||||
{% if page.sidebar.title %}<header><h4 class="nav__title" style="padding: 0;">{{ page.sidebar.title }}</h4></header>{% endif %}
|
||||
<ul>
|
||||
{% for nav in navigation %}
|
||||
<li>
|
||||
{% if nav.url %}
|
||||
{% comment %}internal/external URL check{% endcomment %}
|
||||
{% if nav.url contains "://" %}
|
||||
{% assign domain = "" %}
|
||||
{% else %}
|
||||
{% assign domain = base_path %}
|
||||
{% endif %}
|
||||
|
||||
<a href="{{ domain }}{{ nav.url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
|
||||
{% else %}
|
||||
<span class="nav__sub-title">{{ nav.title }}</span>
|
||||
{% endif %}
|
||||
|
||||
{% if nav.children != null %}
|
||||
<ul>
|
||||
{% for child in nav.children %}
|
||||
{% comment %}internal/external URL check{% endcomment %}
|
||||
{% if child.url contains "://" %}
|
||||
{% assign domain = "" %}
|
||||
{% else %}
|
||||
{% assign domain = base_path %}
|
||||
{% endif %}
|
||||
|
||||
{% comment %}set "active" class on current page{% endcomment %}
|
||||
{% if child.url == page.url %}
|
||||
{% assign active = "active" %}
|
||||
{% else %}
|
||||
{% assign active = "" %}
|
||||
{% endif %}
|
||||
|
||||
{% if child.disable == "yes" %}
|
||||
{% assign disable = "nav__noclick" %}
|
||||
{% else %}
|
||||
{% assign disable = "" %}
|
||||
{% endif %}
|
||||
|
||||
<li><a href="{{ domain }}{{ child.url }}" class="{{ disable }} {{ active }}">{{ child.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -1,55 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.header.image contains "://" %}
|
||||
{% capture img_path %}{{ page.header.image }}{% endcapture %}
|
||||
{% else %}
|
||||
{% capture img_path %}{{ page.header.image | prepend: "/images/" | prepend: base_path }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.header.cta_url contains "://" %}
|
||||
{% capture cta_path %}{{ page.header.cta_url }}{% endcapture %}
|
||||
{% else %}
|
||||
{% capture cta_path %}{{ page.header.cta_url | prepend: base_path }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.header.overlay_image contains "://" %}
|
||||
{% capture overlay_img_path %}{{ page.header.overlay_image }}{% endcapture %}
|
||||
{% elsif page.header.overlay_image %}
|
||||
{% capture overlay_img_path %}{{ page.header.overlay_image | prepend: "/images/" | prepend: base_path }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.header.overlay_filter contains "rgba" %}
|
||||
{% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
|
||||
{% elsif page.header.overlay_filter %}
|
||||
{% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
<div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
|
||||
style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}), {% endif %}url('{{ overlay_img_path }}');{% endif %}"
|
||||
>
|
||||
{% if page.header.overlay_color or page.header.overlay_image %}
|
||||
<div class="wrapper">
|
||||
<h1 class="page__title" itemprop="headline">
|
||||
{% if paginator %}
|
||||
{{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}
|
||||
{% else %}
|
||||
{{ page.title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
|
||||
{% endif %}
|
||||
</h1>
|
||||
{% if page.excerpt %}
|
||||
<p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
|
||||
{% endif %}
|
||||
{% if site.read_time and page.read_time %}
|
||||
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
|
||||
{% endif %}
|
||||
{% if page.header.cta_url %}
|
||||
<p><a href="{{ cta_path }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
<img src="{{ img_path }}" alt="{{ page.title }}" class="page__hero-image">
|
||||
{% endif %}
|
||||
{% if page.header.caption %}
|
||||
<span class="page__hero-caption">{{ page.header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -1,9 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if site.tag_archive.type and page.tags[0] %}
|
||||
{% include tag-list.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.category_archive.type and page.categories[0] %}
|
||||
{% include category-list.html %}
|
||||
{% endif %}
|
||||
@@ -1,70 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if paginator.total_pages > 1 %}
|
||||
<nav class="pagination">
|
||||
<ul>
|
||||
{% comment %} Link for previous page {% endcomment %}
|
||||
{% if paginator.previous_page %}
|
||||
{% if paginator.previous_page == 1 %}
|
||||
<li><a href="{{ base_path }}/">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ base_path }}/page{{ paginator.previous_page }}/">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
|
||||
{% endif %}
|
||||
|
||||
{% comment %} First page {% endcomment %}
|
||||
{% if paginator.page == 1 %}
|
||||
<li><a href="#" class="disabled current">1</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ base_path }}/">1</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% assign page_start = 2 %}
|
||||
{% if paginator.page > 4 %}
|
||||
{% assign page_start = paginator.page | minus: 2 %}
|
||||
{% comment %} Ellipsis for truncated links {% endcomment %}
|
||||
<li><a href="#" class="disabled">…</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% assign page_end = paginator.total_pages | minus: 1 %}
|
||||
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
|
||||
{% if pages_to_end > 4 %}
|
||||
{% assign page_end = paginator.page | plus: 2 %}
|
||||
{% endif %}
|
||||
|
||||
{% for index in (page_start..page_end) %}
|
||||
{% if index == paginator.page %}
|
||||
<li><a href="{{ base_path }}/page{{ index }}/" class="disabled current">{{ index }}</a></li>
|
||||
{% else %}
|
||||
{% comment %} Distance from current page and this link {% endcomment %}
|
||||
{% assign dist = paginator.page | minus: index %}
|
||||
{% if dist < 0 %}
|
||||
{% comment %} Distance must be a positive value {% endcomment %}
|
||||
{% assign dist = 0 | minus: dist %}
|
||||
{% endif %}
|
||||
<li><a href="{{ base_path }}/page{{ index }}/">{{ index }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% comment %} Ellipsis for truncated links {% endcomment %}
|
||||
{% if pages_to_end > 3 %}
|
||||
<li><a href="#" class="disabled">…</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.page == paginator.total_pages %}
|
||||
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ base_path }}/page{{ paginator.total_pages }}/">{{ paginator.total_pages }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% comment %} Link next page {% endcomment %}
|
||||
{% if paginator.next_page %}
|
||||
<li><a href="{{ base_path }}/page{{ paginator.next_page }}/">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
@@ -1,16 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.previous or page.next %}
|
||||
<nav class="pagination">
|
||||
{% if page.previous %}
|
||||
<a href="{{ base_path }}{{ page.previous.url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
|
||||
{% else %}
|
||||
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
|
||||
{% endif %}
|
||||
{% if page.next %}
|
||||
<a href="{{ base_path }}{{ page.next.url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
|
||||
{% else %}
|
||||
<a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
{% endif %}
|
||||
@@ -1,17 +0,0 @@
|
||||
{% if post.read_time %}
|
||||
{% assign words = post.content | strip_html | number_of_words %}
|
||||
{% elsif page.read_time %}
|
||||
{% assign words = page.content | strip_html | number_of_words %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.words_per_minute %}
|
||||
{% if words < 180 %}
|
||||
{{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% elsif words < 360 %}
|
||||
1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% else %}
|
||||
{{ words | divided_by:site.words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ site.data.ui-text[site.locale].undefined_wpm | "Undefined parameter words_per_minute at _config.yml" }}
|
||||
{% endif %}
|
||||
@@ -1,4 +0,0 @@
|
||||
<script src="{{ base_path }}/assets/js/main.min.js"></script>
|
||||
|
||||
{% include analytics.html %}
|
||||
{% include /comments-providers/scripts.html %}
|
||||
@@ -1,145 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<!-- begin SEO -->
|
||||
{% if site.url %}
|
||||
{% assign seo_url = site.url | append: site.baseurl %}
|
||||
{% endif %}
|
||||
{% assign seo_url = seo_url | default: site.github.url %}
|
||||
|
||||
{% if page.title %}
|
||||
{% assign seo_title = page.title | append: " " | append: site.title_separator | append: " " | append: site.title %}
|
||||
{% endif %}
|
||||
|
||||
{% if seo_title %}
|
||||
{% assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.url %}
|
||||
{% assign canonical_url = page.url | replace: "index.html", "" | prepend: site.url %}
|
||||
{% endif %}
|
||||
|
||||
<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ site.title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
|
||||
|
||||
{% assign seo_description = page.description | default: page.excerpt | default: site.description %}
|
||||
{% if seo_description %}
|
||||
{% assign seo_description = seo_description | markdownify | strip_html | strip_newlines | escape_once %}
|
||||
{% endif %}
|
||||
|
||||
{% assign seo_author = page.author | default: page.author[0] | default: site.author[0] %}
|
||||
{% if seo_author %}
|
||||
{% if seo_author.twitter %}
|
||||
{% assign seo_author_twitter = seo_author.twitter %}
|
||||
{% else %}
|
||||
{% if site.data.authors and site.data.authors[seo_author] %}
|
||||
{% assign seo_author_twitter = site.data.authors[seo_author].twitter %}
|
||||
{% else %}
|
||||
{% assign seo_author_twitter = seo_author %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% assign seo_author_twitter = seo_author_twitter | replace: "@", "" %}
|
||||
{% endif %}
|
||||
|
||||
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en" }}">
|
||||
<meta property="og:site_name" content="{{ site.title }}">
|
||||
<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
|
||||
|
||||
{% if seo_url %}
|
||||
<link rel="canonical" href="{{ page.url | prepend: seo_url | replace: "/index.html", "/" }}">
|
||||
<meta property="og:url" content="{{ page.url | prepend: seo_url | replace: "/index.html", "/" }}">
|
||||
{% endif %}
|
||||
|
||||
{% if page.excerpt %}
|
||||
<meta property="og:description" content="{{ seo_description }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.twitter.username %}
|
||||
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
|
||||
<meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
|
||||
<meta name="twitter:description" content="{{ seo_description }}">
|
||||
<meta name="twitter:url" content="{{ canonical_url }}">
|
||||
|
||||
{% if page.header.image %}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="{% if page.header.image contains "://" %}{{ page.header.image }}{% else %}{{ page.header.image | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% else %}
|
||||
<meta name="twitter:card" content="summary">
|
||||
{% if page.header.teaser %}
|
||||
<meta name="twitter:image" content="{% if page.header.teaser contains "://" %}{{ page.header.teaser }}{% else %}{{ page.header.teaser | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% elsif site.og_image %}
|
||||
<meta name="twitter:image" content="{{ site.og_image | prepend: "/images/" | prepend: base_path }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if seo_author_twitter %}
|
||||
<meta name="twitter:creator" content="@{{ seo_author_twitter }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.facebook %}
|
||||
{% if site.facebook.publisher %}
|
||||
<meta property="article:publisher" content="{{ site.facebook.publisher }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.facebook.app_id %}
|
||||
<meta property="fb:app_id" content="{{ site.facebook.app_id }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.header.image %}
|
||||
<meta property="og:image" content="{% if page.header.image contains "://" %}{{ page.header.image }}{% else %}{{ page.header.image | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% elsif page.header.overlay_image %}
|
||||
<meta property="og:image" content="{% if page.header.overlay_image contains "://" %}{{ page.header.overlay_image }}{% else %}{{ page.header.overlay_image | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% elsif page.header.teaser %}
|
||||
<meta property="og:image" content="{% if page.header.teaser contains "://" %}{{ page.header.teaser }}{% else %}{{ page.header.teaser | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% elsif site.og_image %}
|
||||
<meta property="og:image" content="{% if site.og_image contains "://" %}{{ site.og_image }}{% else %}{{ site.og_image | prepend: "/images/" | prepend: base_path }}{% endif %}">
|
||||
{% endif %}
|
||||
|
||||
{% if page.date %}
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.previous_page %}
|
||||
<link rel="prev" href="{{ paginator.previous_page_path | prepend: seo_url }}">
|
||||
{% endif %}
|
||||
{% if paginator.next_page %}
|
||||
<link rel="next" href="{{ paginator.next_page_path | prepend: seo_url }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.og_image %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "Organization",
|
||||
"url": {{ seo_url | jsonify }},
|
||||
"logo": {{ site.og_image | prepend: "/images/" | prepend: base_path | jsonify }}
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if site.social %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context" : "http://schema.org",
|
||||
"@type" : "{% if site.social.type %}{{ site.social.type }}{% else %}Person{% endif %}",
|
||||
"name" : "{{ site.social.name | default: site.name }}",
|
||||
"url" : {{ seo_url | jsonify }},
|
||||
"sameAs" : {{ site.social.links | jsonify }}
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{% if site.google_site_verification %}
|
||||
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
|
||||
{% endif %}
|
||||
{% if site.bing_site_verification %}
|
||||
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.alexa_site_verification %}
|
||||
<meta name="alexaVerifyID" content="{{ site.alexa_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.yandex_site_verification %}
|
||||
<meta name="yandex-verification" content="{{ site.yandex_site_verification }}">
|
||||
{% endif %}
|
||||
<!-- end SEO -->
|
||||
@@ -1,25 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.author_profile or layout.author_profile or page.sidebar %}
|
||||
<div class="sidebar sticky">
|
||||
{% if page.author_profile or layout.author_profile %}{% include author-profile.html %}{% endif %}
|
||||
{% if page.sidebar %}
|
||||
{% for s in page.sidebar %}
|
||||
{% if s.image %}
|
||||
<img src=
|
||||
{% if s.image contains "://" %}
|
||||
"{{ s.image }}"
|
||||
{% else %}
|
||||
"{{ s.image | prepend: "/images/" | prepend: base_path }}"
|
||||
{% endif %}
|
||||
alt="{% if s.image_alt %}{{ s.image_alt }}{% endif %}">
|
||||
{% endif %}
|
||||
{% if s.title %}<h3>{{ s.title }}</h3>{% endif %}
|
||||
{% if s.text %}{{ s.text | markdownify }}{% endif %}
|
||||
{% endfor %}
|
||||
{% if page.sidebar.nav %}
|
||||
{% include nav_list nav=page.sidebar.nav %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -1,15 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
<section class="page__share">
|
||||
{% if site.data.ui-text[site.locale].share_on_label %}
|
||||
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
|
||||
{% endif %}
|
||||
|
||||
<a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username }}&{% endif %}text={{ page.title }} {{ base_path }}{{ page.url }}" class="btn btn--twitter" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
|
||||
|
||||
<a href="https://www.facebook.com/sharer/sharer.php?u={{ base_path }}{{ page.url }}" class="btn btn--facebook" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
|
||||
|
||||
<a href="https://plus.google.com/share?url={{ base_path }}{{ page.url }}" class="btn btn--google-plus" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
|
||||
|
||||
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ base_path }}{{ page.url }}" class="btn btn--linkedin" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
|
||||
</section>
|
||||
@@ -1,28 +0,0 @@
|
||||
{% include base_path %}
|
||||
|
||||
{% case site.tag_archive.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if site.tag_archive.path %}
|
||||
{% comment %}
|
||||
<!-- Sort alphabetically regardless of case e.g. a B c d E -->
|
||||
<!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
|
||||
{% endcomment %}
|
||||
{% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}#{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
|
||||
{% assign tag_hashes = (page_tags | split: ',' | sort:0) %}
|
||||
|
||||
<p class="page__taxonomy">
|
||||
<strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
|
||||
<span itemprop="keywords">
|
||||
{% for hash in tag_hashes %}
|
||||
{% assign keyValue = hash | split: '#' %}
|
||||
{% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
|
||||
<a href="{{ base_path }}{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
|
||||
{% endfor %}
|
||||
</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
@@ -1,7 +0,0 @@
|
||||
<aside class="sidebar__right">
|
||||
<nav class="toc" markdown="1">
|
||||
<header><h4 class="nav__title"><i class="fa fa-{{ include.icon | default: 'file-text' }}"></i> {{ include.title | default: site.data.ui-text[site.locale].toc_label }}</h4></header>
|
||||
* Auto generated table of contents
|
||||
{:toc .toc__menu}
|
||||
</nav>
|
||||
</aside>
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
author_profile: false
|
||||
---
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<div class="archive">
|
||||
<h1 class="page__title">{{ page.title }}</h1>
|
||||
{% include base_path %}
|
||||
{% for post in page.posts %}
|
||||
{% include archive-single.html %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<div class="archive">
|
||||
{% unless page.header.overlay_color or page.header.overlay_image %}
|
||||
<h1 class="page__title">{{ page.title }}</h1>
|
||||
{% endunless %}
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
# Jekyll layout that compresses HTML
|
||||
# v3.0.2
|
||||
# http://jch.penibelst.de/
|
||||
# © 2014–2015 Anatol Broder
|
||||
# MIT License
|
||||
---
|
||||
|
||||
{% capture _LINE_FEED %}
|
||||
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
<!doctype html>
|
||||
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
|
||||
<head>
|
||||
{% include head.html %}
|
||||
{% include head/custom.html %}
|
||||
</head>
|
||||
|
||||
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
|
||||
|
||||
{% include browser-upgrade.html %}
|
||||
{% include masthead.html %}
|
||||
|
||||
{{ content }}
|
||||
|
||||
<div class="page__footer">
|
||||
<footer>
|
||||
{% include footer/custom.html %}
|
||||
{% include footer.html %}
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
{% include scripts.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,19 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html>
|
||||
<head>
|
||||
{% include head_print.html %}
|
||||
</head>
|
||||
|
||||
<body class="{% if page.type == " title "%}title{% elsif page.type == "frontmatter " %}frontmatter{% elsif page.type == "first_page
|
||||
" %}first_page{% endif %} print">
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<!-- Content Column -->
|
||||
<div class="col-md-9">
|
||||
{{content}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
layout: default_print
|
||||
comments: false
|
||||
---
|
||||
|
||||
|
||||
|
||||
<div class="post-header">
|
||||
<h1 class="post-title-main" id="{{page.permalink | replace: '/', '' }}">{{ page.excerpt }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="post-content">
|
||||
|
||||
{% if page.summary %}
|
||||
<div class="summary">{{page.summary}}</div>
|
||||
{% endif %}
|
||||
{{ content }}
|
||||
</div>
|
||||
@@ -1,81 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<script type="text/javascript" async
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML">
|
||||
</script>
|
||||
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
|
||||
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
|
||||
{% if page.modified %}<meta itemprop="dateModified" content="{{ page.modified | date: "%B %d, %Y" }}">{% endif %}
|
||||
|
||||
<div class="page__inner-wrap">
|
||||
{% unless page.header.overlay_color or page.header.overlay_image %}
|
||||
<header>
|
||||
{% if page.title %}<h1 class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
|
||||
{% if page.read_time %}
|
||||
<p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> {% include read-time.html %}</p>
|
||||
{% endif %}
|
||||
</header>
|
||||
{% endunless %}
|
||||
|
||||
<section class="page__content" itemprop="text">
|
||||
{{ content }}
|
||||
{% if page.link %}<div><a href="{{ page.link }}" class="btn">{{ site.data.ui-text[site.locale].ext_link_label | default: "Direct Link" }}</a></div>{% endif %}
|
||||
</section>
|
||||
|
||||
<footer class="page__meta">
|
||||
{% if site.data.ui-text[site.locale].meta_label %}
|
||||
<h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4>
|
||||
{% endif %}
|
||||
{% include page__taxonomy.html %}
|
||||
{% if page.modified %}
|
||||
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.modified | date: "%Y-%m-%d" }}">{{ page.modified | date: "%B %d, %Y" }}</time></p>
|
||||
{% elsif page.date %}
|
||||
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %d, %Y" }}</time></p>
|
||||
{% endif %}
|
||||
</footer>
|
||||
|
||||
{% if page.share %}{% include social-share.html %}{% endif %}
|
||||
|
||||
{% include post_pagination.html %}
|
||||
</div>
|
||||
|
||||
{% if site.comments.provider and page.comments %}
|
||||
{% include comments.html %}
|
||||
{% endif %}
|
||||
</article>
|
||||
|
||||
{% comment %}<!-- only show related on a post page when not disabled -->{% endcomment %}
|
||||
{% if page.id and page.related and site.related_posts.size > 0 %}
|
||||
<div class="page__related">
|
||||
{% if site.data.ui-text[site.locale].related_label %}
|
||||
<h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
|
||||
{% endif %}
|
||||
<div class="grid__wrapper">
|
||||
{% for post in site.related_posts limit:4 %}
|
||||
{% include archive-single.html type="grid" %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
<article class="splash" itemscope itemtype="http://schema.org/CreativeWork">
|
||||
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date: "%B %d, %Y" }}">{% endif %}
|
||||
{% if page.modified %}<meta itemprop="dateModified" content="{{ page.modified | date: "%B %d, %Y" }}">{% endif %}
|
||||
|
||||
<section class="page__content" itemprop="text">
|
||||
{{ content }}
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "Page Not Found"
|
||||
layout: single
|
||||
excerpt: "Page not found. Your pixels are in another canvas."
|
||||
sitemap: false
|
||||
permalink: /404.html
|
||||
---
|
||||
|
||||
Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below.
|
||||
|
||||
<script type="text/javascript">
|
||||
var GOOG_FIXURL_LANG = 'en';
|
||||
var GOOG_FIXURL_SITE = '{{ site.url }}'
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js">
|
||||
</script>
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
layout: splash
|
||||
permalink: /about/
|
||||
author_profile: false
|
||||
title: "About"
|
||||
excerpt: "The project and the authors"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
## Main authors and mantainers
|
||||
|
||||
* Peter Boyle
|
||||
* Guido Cossu
|
||||
* Azusa Yamaguchi
|
||||
* Antonin Portelli
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
This library provides data parallel C++ container classes with internal memory layout
|
||||
that is transformed to map efficiently to SIMD architectures. CSHIFT facilities
|
||||
are provided, similar to HPF and cmfortran, and user control is given over the mapping of
|
||||
array indices to both MPI tasks and SIMD processing elements.
|
||||
|
||||
* Identically shaped arrays then be processed with perfect data parallelisation.
|
||||
* Such identically shapped arrays are called conformable arrays.
|
||||
|
||||
The transformation is based on the observation that Cartesian array processing involves
|
||||
identical processing to be performed on different regions of the Cartesian array.
|
||||
|
||||
The library will both geometrically decompose into MPI tasks and across SIMD lanes.
|
||||
Local vector loops are parallelised with OpenMP pragmas.
|
||||
|
||||
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but
|
||||
optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification
|
||||
for most programmers.
|
||||
|
||||
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
||||
Presently SSE4 (128 bit) AVX, AVX2 (256 bit) and IMCI and AVX512 (512 bit) targets are supported (ARM NEON and BG/Q QPX on the way).
|
||||
|
||||
These are presented as `vRealF`, `vRealD`, `vComplexF`, and `vComplexD` internal vector data types. These may be useful in themselves for other programmers.
|
||||
The corresponding scalar types are named `RealF`, `RealD`, `ComplexF` and `ComplexD`.
|
||||
|
||||
MPI, OpenMP, and SIMD parallelism are present in the library.
|
||||
Please see [this paper](https://arxiv.org/abs/1512.03487) for more detail.
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Coordinates"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/coordinates.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
The Grid is define on a N-dimensional set of integer coordinates.
|
||||
|
||||
The maximum dimension is eight, and indexes in this space make use of the `Coordinate` class.
|
||||
The coordinate class shares a similar interface to `std::vector<int>`, but contains all data within the
|
||||
object, and has a fixed maximum length (template parameter).
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
const int Nd=4;
|
||||
Coordinate point(Nd);
|
||||
|
||||
for(int i=0;i<Nd;i++)
|
||||
point[i] = 1;
|
||||
|
||||
std::cout<< point <<std::endl;
|
||||
point.resize(3);
|
||||
std::cout<< point <<std::endl;
|
||||
```
|
||||
|
||||
This enables the coordinates to be manipulated without heap allocation or thread contention,
|
||||
and avoids introducing STL functions into GPU code, but does so at the expense of introducing
|
||||
a maximum dimensionality. This limit is easy to change (`lib/util/Coordinate.h`).
|
||||
@@ -1,90 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Grids"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/grids.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
A `Grid` object defines the geometry of a global cartesian array, and through inheritance
|
||||
provides access to message passing decomposition, the local lattice, and the message passing primitives.
|
||||
|
||||
The constructor requires parameters to indicate how the spatial (and temporal) indices
|
||||
are decomposed across MPI tasks and SIMD lanes of the vector length.
|
||||
We use a partial vectorisation transformation, must select
|
||||
which space-time dimensions participate in SIMD vectorisation.
|
||||
The Lattice containers are defined to have opaque internal layout, hiding this layout transformation.
|
||||
|
||||
We define GridCartesian and GridRedBlackCartesian which both inherit from `GridBase`:
|
||||
|
||||
```c++
|
||||
class GridCartesian : public GridBase
|
||||
class GridRedBlackCartesian: public GridBase
|
||||
```
|
||||
|
||||
The simplest Cartesian Grid constructor distributes across `MPI_COMM_WORLD`:
|
||||
|
||||
```c++
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Construct from comm world
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
GridCartesian(const Coordinate &dimensions,
|
||||
const Coordinate &simd_layout,
|
||||
const Coordinate &processor_grid);
|
||||
```
|
||||
|
||||
A second constructor will create a child communicator from a previously declared Grid.
|
||||
This allows to subdivide the processor grid, and also to define lattices of differing dimensionalities and sizes,
|
||||
useful for both Chiral fermions, lower dimensional operations, and multigrid:
|
||||
|
||||
```c++
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Constructor takes a parent grid and possibly subdivides communicator.
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
GridCartesian(const Coordinate &dimensions,
|
||||
const Coordinate &simd_layout,
|
||||
const Coordinate &processor_grid,
|
||||
const GridCartesian &parent,int &split_rank);
|
||||
```
|
||||
|
||||
The Grid object provides much `internal` functionality to map a lattice site to
|
||||
a node and lexicographic index. These are not needed by code interfacing
|
||||
to the data parallel layer.
|
||||
|
||||
**Example** (`tests/solver/Test_split_grid.cc`):
|
||||
|
||||
```c++
|
||||
const int Ls=8;
|
||||
|
||||
////////////////////////////////////////////
|
||||
// Grids distributed across full machine
|
||||
// pick up default command line args
|
||||
////////////////////////////////////////////
|
||||
Grid_init(&argc,&argv);
|
||||
|
||||
Coordinate latt_size = GridDefaultLatt();
|
||||
Coordinate simd_layout = GridDefaultSimd(Nd,vComplex::Nsimd());
|
||||
Coordinate mpi_layout = GridDefaultMpi();
|
||||
|
||||
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(),
|
||||
GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
|
||||
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
|
||||
GridRedBlackCartesian * rbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
|
||||
GridRedBlackCartesian * FrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid);
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Split into N copies of 1^4 mpi communicators
|
||||
/////////////////////////////////////////////
|
||||
Coordinate mpi_split (mpi_layout.size(),1);
|
||||
GridCartesian * SGrid = new GridCartesian(GridDefaultLatt(),
|
||||
GridDefaultSimd(Nd,vComplex::Nsimd()),
|
||||
mpi_split,
|
||||
*UGrid);
|
||||
|
||||
GridCartesian * SFGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,SGrid);
|
||||
GridRedBlackCartesian * SrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(SGrid);
|
||||
GridRedBlackCartesian * SFrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,SGrid);
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Data parallel API"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/introduction.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
|
||||
Data parallel array indices are divided into two types.
|
||||
|
||||
* Internal indices, such as complex, colour, spin degrees of freedom
|
||||
* spatial (space-time) indices.
|
||||
|
||||
The ranges of all internal degrees are determined by template parameters,
|
||||
and known at compile time. The ranges of spatial indices are dynamic, run time
|
||||
values and the Cartesian structure information is contained and accessed via `Grid` objects.
|
||||
|
||||
Grid objects are the controlling entity for the decomposition of a distributed `Lattice`
|
||||
array across MPI tasks, nodes, SIMD lanes, accelerators. Threaded loops are used
|
||||
as appropriate on host code.
|
||||
|
||||
Data parallel operations can only be performed between Lattice objects constructed
|
||||
from the same Grid pointer. These are called `conformable` operations.
|
||||
|
||||
We will focus initially on the internal indices as these are the building blocks assembled
|
||||
in Lattice container classes. Every Lattice container class constructor requires a Grid object
|
||||
pointer.
|
||||
|
||||
@@ -1,560 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Lattice containers"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/lattice_containers.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
{% include toc icon="gears" title="Contents" %}
|
||||
|
||||
Lattice objects may be constructed to contain the local portion of a distribued array of any tensor type.
|
||||
For performance reasons the tensor type uses a vector `Real` or `Complex` as the fundamental datum.
|
||||
|
||||
Every lattice requires a `GridBase` object pointer to be provided in its constructor. Memory is allocated
|
||||
at construction time. If a Lattice is passed a RedBlack grid, it allocates
|
||||
half the storage of the full grid, and may either store the red or black checkerboard. The Lattice object
|
||||
will automatically track through assignments which checkerboard it refers to.
|
||||
For example, shifting a Even checkerboard by an odd distance produces an Odd result field.
|
||||
|
||||
Struct of array objects are defined, and used in the template parameters to the lattice class.
|
||||
|
||||
**Example** (`lib/qcd/QCD.h`):
|
||||
|
||||
```c++
|
||||
template<typename vtype> using iSpinMatrix = iScalar<iMatrix<iScalar<vtype>, Ns> >;
|
||||
typedef iSpinMatrix<ComplexF> SpinMatrixF; //scalar
|
||||
typedef iSpinMatrix<vComplexF> vSpinMatrixF;//vectorised
|
||||
typedef Lattice<vSpinMatrixF> LatticeSpinMatrixF;
|
||||
```
|
||||
|
||||
The full range of QCD relevant lattice objects is given below.
|
||||
|
||||
|-----------|------------|----------|-----------|---------------|---------------------------------|--------------------------|
|
||||
| Lattice | Lorentz | Spin | Colour | scalar_type | Field | Synonym |
|
||||
|-----------|------------|----------|-----------|---------------|---------------------------------|--------------------------|
|
||||
|`Vector` | `Scalar` | `Scalar` | `Scalar` | `RealD` | `LatticeRealD` | N/A |
|
||||
|`Vector` | `Scalar` | `Scalar` | `Scalar` | `ComplexD` | `LatticeComplexD` | N/A |
|
||||
|`Vector` | `Scalar` | `Scalar` | `Matrix` | `ComplexD` | `LatticeColourMatrixD` | `LatticeGaugeLink` |
|
||||
|`Vector` | `Vector` | `Scalar` | `Matrix` | `ComplexD` | `LatticeLorentzColourMatrixD` | `LatticeGaugeFieldD` |
|
||||
|`Vector` | `Scalar` | `Vector` | `Vector` | `ComplexD` | `LatticeSpinColourVectorD` | `LatticeFermionD` |
|
||||
|`Vector` | `Scalar` | `Vector` | `Vector` | `ComplexD` | `LatticeHalfSpinColourVectorD` | `LatticeHalfFermionD` |
|
||||
|`Vector` | `Scalar` | `Matrix` | `Matrix` | `ComplexD` | `LatticeSpinColourMatrixD` | `LatticePropagatorD` |
|
||||
|-----------|------------|----------|-----------|---------------|---------------------------------|--------------------------|
|
||||
|
||||
Additional single precison variants are defined with the suffix `F`.
|
||||
Other lattice objects can be defined using the sort of typedef's shown above if needed.
|
||||
|
||||
### Opaque containers
|
||||
|
||||
The layout within the container is complicated to enable maximum opportunity for vectorisation, and
|
||||
is opaque from the point of view of the API definition. The key implementation observation is that
|
||||
so long as data parallel operations are performed and adjacent SIMD lanes correspond to well separated
|
||||
lattice sites, then identical operations are performed on all SIMD lanes and enable good vectorisation.
|
||||
|
||||
Because the layout is opaque, import and export routines from naturally ordered x,y,z,t arrays
|
||||
are provided (`lib/lattice/Lattice_transfer.h`):
|
||||
|
||||
```c++
|
||||
unvectorizeToLexOrdArray(std::vector<sobj> &out, const Lattice<vobj> &in);
|
||||
vectorizeFromLexOrdArray(std::vector<sobj> &in , Lattice<vobj> &out);
|
||||
```
|
||||
|
||||
The Lexicographic order of data in the external vector fields is defined by (`lib/util/Lexicographic.h`):
|
||||
|
||||
```c++
|
||||
Lexicographic::IndexFromCoor(const Coordinate &lcoor, int &lex,Coordinate *local_dims);
|
||||
```
|
||||
|
||||
This ordering is $$x + L_x * y + L_x*L_y*z + L_x*L_y*L_z *t$$
|
||||
|
||||
Peek and poke routines are provided to perform single site operations. These operations are
|
||||
extremely low performance and are not intended for algorithm development or performance critical code.
|
||||
|
||||
The following are "collective" operations and involve communication between nodes. All nodes receive the same
|
||||
result by broadcast from the owning node:
|
||||
|
||||
```c++
|
||||
void peekSite(sobj &s,const Lattice<vobj> &l,const Coordinate &site);
|
||||
void pokeSite(const sobj &s,Lattice<vobj> &l,const Coordinate &site);
|
||||
```
|
||||
|
||||
The following are executed independently by each node:
|
||||
|
||||
```c++
|
||||
void peekLocalSite(sobj &s,const Lattice<vobj> &l,Coordinate &site);
|
||||
void pokeLocalSite(const sobj &s,Lattice<vobj> &l,Coordinate &site);
|
||||
```
|
||||
|
||||
Lattices of one tensor type may be transformed into lattices of another tensor type by
|
||||
peeking and poking specific indices in a data parallel manner:
|
||||
|
||||
```c++
|
||||
template<int Index,class vobj> // Vector data parallel index peek
|
||||
auto PeekIndex(const Lattice<vobj> &lhs,int i);
|
||||
|
||||
template<int Index,class vobj> // Matrix data parallel index peek
|
||||
auto PeekIndex(const Lattice<vobj> &lhs,int i,int j);
|
||||
|
||||
template<int Index,class vobj> // Vector poke
|
||||
void PokeIndex(Lattice<vobj> &lhs,const Lattice<> & rhs,int i)
|
||||
|
||||
template<int Index,class vobj> // Matrix poke
|
||||
void PokeIndex(Lattice<vobj> &lhs,const Lattice<> & rhs,int i,int j)
|
||||
```
|
||||
|
||||
The inconsistent capitalisation on the letter P is due to an obscure bug in g++ that has not to
|
||||
our knowledge been fixed in any version. The bug was reported in 2016.
|
||||
|
||||
### Global Reduction operations
|
||||
|
||||
Reduction operations for any lattice field are provided. The result is identical on each computing node
|
||||
that is part of the relevant Grid communicator:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
RealD norm2(const Lattice<vobj> &arg);
|
||||
|
||||
template<class vobj>
|
||||
ComplexD innerProduct(const Lattice<vobj> &left,const Lattice<vobj> &right);
|
||||
|
||||
template<class vobj>
|
||||
vobj sum(const Lattice<vobj> &arg)
|
||||
```
|
||||
|
||||
### Site local reduction operations
|
||||
|
||||
Internal indices may be reduced, site by site, using the following routines:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
auto localNorm2 (const Lattice<vobj> &rhs)
|
||||
|
||||
template<class vobj>
|
||||
auto localInnerProduct (const Lattice<vobj> &lhs,const Lattice<vobj> &rhs)
|
||||
```
|
||||
|
||||
### Outer product
|
||||
|
||||
A site local outer product is defined:
|
||||
|
||||
```c++
|
||||
template<class ll,class rr>
|
||||
auto outerProduct (const Lattice<ll> &lhs,const Lattice<rr> &rhs)
|
||||
```
|
||||
|
||||
### Slice operations
|
||||
|
||||
Slice operations are defined to operate on one lower dimension than the full lattice. The omitted dimension
|
||||
is the parameter orthogdim:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
void sliceSum(const Lattice<vobj> &Data,
|
||||
std::vector<typename vobj::scalar_object> &result,
|
||||
int orthogdim);
|
||||
|
||||
template<class vobj>
|
||||
void sliceInnerProductVector( std::vector<ComplexD> & result,
|
||||
const Lattice<vobj> &lhs,
|
||||
const Lattice<vobj> &rhs,
|
||||
int orthogdim);
|
||||
|
||||
template<class vobj>
|
||||
void sliceNorm (std::vector<RealD> &sn,
|
||||
const Lattice<vobj> &rhs,
|
||||
int orthogdim);
|
||||
```
|
||||
|
||||
### Data parallel expression template engine
|
||||
|
||||
The standard arithmetic operators and some data parallel library functions are implemented site by site
|
||||
on lattice types.
|
||||
|
||||
Operations may only ever combine lattice objects that have been constructed from the **same** grid pointer.
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeFermionD A(&grid);
|
||||
LatticeFermionD B(&grid);
|
||||
LatticeFermionD C(&grid);
|
||||
|
||||
A = B - C;
|
||||
```
|
||||
|
||||
Such operations are said to be **conformable** and are the lattice are guaranteed to have the same dimensions
|
||||
and both MPI and SIMD decomposition because they are based on the same grid object. The conformability check
|
||||
is lightweight and simply requires the same grid pointers be passed to the lattice objects. The data members
|
||||
of the grid objects are not compared.
|
||||
|
||||
Conformable lattice fields may be combined with appropriate scalar types in expressions. The implemented
|
||||
rules follow those already documented for the tensor types.
|
||||
|
||||
|
||||
|
||||
|
||||
### Unary operators and functions
|
||||
|
||||
The following sitewise unary operations are defined:
|
||||
|
||||
|-----------------------|---------------------------------------------|
|
||||
| Operation | Description |
|
||||
|-----------------------|---------------------------------------------|
|
||||
|`operator-` | negate |
|
||||
|`adj` | Hermitian conjugate |
|
||||
|`conjugate` | complex conjugate |
|
||||
|`trace` | sitewise trace |
|
||||
|`transpose` | sitewise transpose |
|
||||
|`Ta` | take traceles anti Hermitian part |
|
||||
|`ProjectOnGroup` | reunitarise or orthogonalise |
|
||||
|`real` | take the real part |
|
||||
|`imag` | take the imaginary part |
|
||||
|`toReal` | demote complex to real |
|
||||
|`toComplex` | promote real to complex |
|
||||
|`timesI` | elementwise +i mult (0 is not multiplied) |
|
||||
|`timesMinusI` | elementwise -i mult (0 is not multiplied) |
|
||||
|`abs` | elementwise absolute value |
|
||||
|`sqrt` | elementwise square root |
|
||||
|`rsqrt` | elementwise reciprocal square root |
|
||||
|`sin` | elementwise sine |
|
||||
|`cos` | elementwise cosine |
|
||||
|`asin` | elementwise inverse sine |
|
||||
|`acos` | elementwise inverse cosine |
|
||||
|`log` | elementwise logarithm |
|
||||
|`exp` | elementwise exponentiation |
|
||||
|`operator!` | Logical negation of integer field |
|
||||
|`Not` | Logical negation of integer field |
|
||||
|-----------------------|---------------------------------------------|
|
||||
|
||||
The following sitewise applied functions with additional parameters are:
|
||||
|
||||
```c++
|
||||
template<class obj> Lattice<obj> pow(const Lattice<obj> &rhs_i,RealD y);
|
||||
|
||||
template<class obj> Lattice<obj> mod(const Lattice<obj> &rhs_i,Integer y);
|
||||
|
||||
template<class obj> Lattice<obj> div(const Lattice<obj> &rhs_i,Integer y);
|
||||
|
||||
template<class obj> Lattice<obj>
|
||||
expMat(const Lattice<obj> &rhs_i, RealD alpha, Integer Nexp = DEFAULT_MAT_EXP);
|
||||
```
|
||||
|
||||
### Binary operators
|
||||
|
||||
The following binary operators are defined:
|
||||
|
||||
```
|
||||
operator+
|
||||
operator-
|
||||
operator*
|
||||
operator/
|
||||
```
|
||||
|
||||
Logical are defined on LatticeInteger types:
|
||||
|
||||
```
|
||||
operator&
|
||||
operator|
|
||||
operator&&
|
||||
operator||
|
||||
```
|
||||
|
||||
### Ternary operator, logical operatons and where
|
||||
|
||||
Within the data parallel level of the API the only way to perform operations
|
||||
that are differentiated between sites is use predicated execution.
|
||||
|
||||
The predicate takes the form of a `LatticeInteger` which is confromable with both
|
||||
the `iftrue` and `iffalse` argument:
|
||||
|
||||
```c++
|
||||
template<class vobj,class iobj> void where(const Lattice<iobj> &pred,
|
||||
Lattice<vobj> &iftrue,
|
||||
Lattice<vobj> &iffalse);
|
||||
```
|
||||
This plays the data parallel analogue of the C++ ternary operator:
|
||||
|
||||
```c++
|
||||
a = b ? c : d;
|
||||
```
|
||||
|
||||
In order to create the predicate in a coordinate dependent fashion it is often useful
|
||||
to use the lattice coordinates.
|
||||
|
||||
The `LatticeCoordinate` function:
|
||||
|
||||
```c++
|
||||
template<class iobj> LatticeCoordinate(Lattice<iobj> &coor,int dir);
|
||||
```
|
||||
|
||||
fills an `Integer` field with the coordinate in the N-th dimension.
|
||||
A usage example is given
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
int dir =3;
|
||||
int block=4;
|
||||
LatticeInteger coor(FineGrid);
|
||||
|
||||
LatticeCoordinate(coor,dir);
|
||||
|
||||
result = where(mod(coor,block)==(block-1),x,z);
|
||||
```
|
||||
|
||||
(Other usage cases of LatticeCoordinate include the generation of plane wave momentum phases.)
|
||||
|
||||
### Site local fused operations
|
||||
|
||||
The biggest limitation of expression template engines is that the optimisation
|
||||
visibility is a single assignment statement in the original source code.
|
||||
|
||||
There is no scope for loop fusion between multiple statements.
|
||||
Multi-loop fusion gives scope for greater cache locality.
|
||||
|
||||
Two primitives for hardware aware parallel loops are provided.
|
||||
These will operate directly on the site objects which are expanded by a factor
|
||||
of the vector length (in our struct of array datatypes).
|
||||
|
||||
Since the mapping of sites
|
||||
to data lanes is opaque, these vectorised loops
|
||||
are *only* appropriate for optimisation of site local operations.
|
||||
|
||||
### View objects
|
||||
|
||||
Due to an obscure aspect of the way that Nvidia handle device C++11 lambda functions,
|
||||
it is necessary to disable the indexing of a Lattice object.
|
||||
|
||||
Rather, a reference to a lattice object must be first obtained.
|
||||
|
||||
The reference is copyable to a GPU, and is able to be indexed on either accelerator code,
|
||||
or by host code.
|
||||
|
||||
In order to prevent people developing code that dereferences Lattice objects in a way that
|
||||
works on CPU compilation, but fails on GPU compilation, we have decided to remove the ability
|
||||
to index a lattice object on CPU code.
|
||||
|
||||
As a result of Nvidia's constraints, all accesses to lattice objects are required to be made
|
||||
through a View object.
|
||||
|
||||
In the following, the type is `LatticeView<vobj>`, however it is wise to use the C++11 auto keyword
|
||||
to avoid naming the type. See code examples below.
|
||||
|
||||
|
||||
### thread_loops
|
||||
|
||||
The first parallel primitive is the thread_loop
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeField r(grid);
|
||||
LatticeField x(grid);
|
||||
LatticeField p(grid);
|
||||
LatticeField mmp(grid);
|
||||
auto r_v = r.View();
|
||||
auto x_v = x.View();
|
||||
auto p_v = p.View();
|
||||
auto mmp_v = mmp.View();
|
||||
thread_loop(s , r_v, {
|
||||
r_v[s] = r_v[s] - a * mmp_v[s];
|
||||
x_v[s] = x_v[s] + a*p_v[s];
|
||||
p_v[s] = p_v[s]*b + r_v[s];
|
||||
});
|
||||
```
|
||||
|
||||
### accelerator_loops
|
||||
|
||||
The second parallel primitive is an accelerated_loop
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeField r(grid);
|
||||
LatticeField x(grid);
|
||||
LatticeField p(grid);
|
||||
LatticeField mmp(grid);
|
||||
auto r_v = r.View();
|
||||
auto x_v = x.View();
|
||||
auto p_v = p.View();
|
||||
auto mmp_v = mmp.View();
|
||||
accelerator_loop(s , r_v, {
|
||||
r_v[s] = r_v[s] - a * mmp_v[s];
|
||||
x_v[s] = x_v[s] + a*p_v[s];
|
||||
p_v[s] = p_v[s]*b + r_v[s];
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
### Cshift
|
||||
|
||||
Site shifting operations are provided using the Cshift function:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
Lattice<vobj> Cshift(const Lattice<vobj> &rhs,int dimension,int shift)
|
||||
```
|
||||
|
||||
This shifts the whole vector by any distance shift in the appropriate dimension.
|
||||
|
||||
For the avoidance of doubt on direction conventions,a positive shift moves the
|
||||
lattice site $$x_mu = 1$$ in the rhs to $$x_mu = 0$$ in the result.
|
||||
|
||||
**Example** (`benchmarks/Benchmark_wilson.cc`):
|
||||
|
||||
```c++
|
||||
{ // Naive wilson implementation
|
||||
ref = Zero();
|
||||
for(int mu=0;mu<Nd;mu++){
|
||||
|
||||
tmp = U[mu]*Cshift(src,mu,1);
|
||||
{
|
||||
auto ref_v = ref.View();
|
||||
auto tmp_v = tmp.View();
|
||||
for(int i=0;i<ref_v.size();i++){
|
||||
ref_v[i]+= tmp_v[i] - Gamma(Gmu[mu])*tmp_v[i]; ;
|
||||
}
|
||||
}
|
||||
|
||||
tmp =adj(U[mu])*src;
|
||||
tmp =Cshift(tmp,mu,-1);
|
||||
{
|
||||
auto ref_v = ref.View();
|
||||
auto tmp_v = tmp.View();
|
||||
for(int i=0;i<ref_v.size();i++){
|
||||
ref_v[i]+= tmp_v[i] + Gamma(Gmu[mu])*tmp_v[i]; ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### CovariantCshift
|
||||
|
||||
Covariant Cshift operations are provided for common cases of boundary condition. These may be further optimised
|
||||
in future:
|
||||
|
||||
```c++
|
||||
template<class covariant,class gauge>
|
||||
Lattice<covariant> CovShiftForward(const Lattice<gauge> &Link, int mu,
|
||||
const Lattice<covariant> &field);
|
||||
|
||||
template<class covariant,class gauge>
|
||||
Lattice<covariant> CovShiftBackward(const Lattice<gauge> &Link, int mu,
|
||||
const Lattice<covariant> &field);
|
||||
```
|
||||
|
||||
### Boundary conditions
|
||||
|
||||
The covariant shift routines occur in namespaces PeriodicBC and ConjugateBC. The correct covariant shift
|
||||
for the boundary condition is passed into the gauge actions and wilson loops via an
|
||||
"Impl" template policy class.
|
||||
|
||||
The relevant staples, plaquettes, and loops are formed by using the provided method:
|
||||
|
||||
```c++
|
||||
Impl::CovShiftForward
|
||||
Impl::CovShiftBackward
|
||||
```
|
||||
|
||||
etc... This makes physics code transform appropriately with externally supplied rules about
|
||||
treating the boundary.
|
||||
|
||||
**Example** (`lib/qcd/util/WilsonLoops.h`):
|
||||
|
||||
```c++
|
||||
static void dirPlaquette(GaugeMat &plaq, const std::vector<GaugeMat> &U,
|
||||
const int mu, const int nu) {
|
||||
// ___
|
||||
//| |
|
||||
//|<__|
|
||||
plaq = Gimpl::CovShiftForward(U[mu],mu,
|
||||
Gimpl::CovShiftForward(U[nu],nu,
|
||||
Gimpl::CovShiftBackward(U[mu],mu,
|
||||
Gimpl::CovShiftIdentityBackward(U[nu], nu))));
|
||||
}
|
||||
```
|
||||
|
||||
### Inter-grid transfer operations
|
||||
|
||||
Transferring between different checkerboards of the same global lattice:
|
||||
|
||||
```c++
|
||||
template<class vobj> void pickCheckerboard(int cb,Lattice<vobj> &half,const Lattice<vobj> &full);
|
||||
template<class vobj> void setCheckerboard(Lattice<vobj> &full,const Lattice<vobj> &half);
|
||||
```
|
||||
|
||||
These are used to set up Schur red-black decomposed solvers, for example.
|
||||
|
||||
Multi-grid projection between a fine and coarse grid:
|
||||
|
||||
```c++
|
||||
template<class vobj,class CComplex,int nbasis>
|
||||
void blockProject(Lattice<iVector<CComplex,nbasis > > &coarseData,
|
||||
const Lattice<vobj> &fineData,
|
||||
const std::vector<Lattice<vobj> > &Basis);
|
||||
```
|
||||
|
||||
Multi-grid promotion to a finer grid:
|
||||
|
||||
```c++
|
||||
template<class vobj,class CComplex,int nbasis>
|
||||
void blockPromote(const Lattice<iVector<CComplex,nbasis > > &coarseData,
|
||||
Lattice<vobj> &fineData,
|
||||
const std::vector<Lattice<vobj> > &Basis)
|
||||
```
|
||||
|
||||
Support for sub-block Linear algebra:
|
||||
|
||||
```c++
|
||||
template<class vobj,class CComplex>
|
||||
void blockZAXPY(Lattice<vobj> &fineZ,
|
||||
const Lattice<CComplex> &coarseA,
|
||||
const Lattice<vobj> &fineX,
|
||||
const Lattice<vobj> &fineY)
|
||||
|
||||
template<class vobj,class CComplex>
|
||||
void blockInnerProduct(Lattice<CComplex> &CoarseInner,
|
||||
const Lattice<vobj> &fineX,
|
||||
const Lattice<vobj> &fineY)
|
||||
|
||||
template<class vobj,class CComplex>
|
||||
void blockNormalise(Lattice<CComplex> &ip,Lattice<vobj> &fineX)
|
||||
|
||||
template<class vobj>
|
||||
void blockSum(Lattice<vobj> &coarseData,const Lattice<vobj> &fineData)
|
||||
|
||||
template<class vobj,class CComplex>
|
||||
void blockOrthogonalise(Lattice<CComplex> &ip,std::vector<Lattice<vobj> > &Basis)
|
||||
```
|
||||
|
||||
Conversion between different SIMD layouts:
|
||||
|
||||
```c++
|
||||
template<class vobj,class vvobj>
|
||||
void localConvert(const Lattice<vobj> &in,Lattice<vvobj> &out)
|
||||
```
|
||||
|
||||
Slices between grid of dimension N and grid of dimentions N+1:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
void InsertSlice(const Lattice<vobj> &lowDim,Lattice<vobj> & higherDim,int slice, int orthog)
|
||||
|
||||
template<class vobj>
|
||||
void ExtractSlice(Lattice<vobj> &lowDim,const Lattice<vobj> & higherDim,int slice, int orthog)
|
||||
```
|
||||
|
||||
Growing a lattice by a multiple factor, with periodic replication:
|
||||
|
||||
```c++
|
||||
template<class vobj>
|
||||
void Replicate(Lattice<vobj> &coarse,Lattice<vobj> & fine)
|
||||
```
|
||||
|
||||
That latter is useful to, for example, pre-thermalise a smaller volume and then grow the volume in HMC.
|
||||
It was written while debugging G-parity boundary conditions.
|
||||
@@ -1,107 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Random number generators"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/random_number_generators.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
Grid provides three configure time options for random the number generator engine.
|
||||
|
||||
* `sitmo`
|
||||
* `ranlux48`
|
||||
* `mt19937`
|
||||
|
||||
The selection is controlled by the `--enable-rng=<option>` flag.
|
||||
|
||||
Sitmo is the default Grid RNG and is recommended. It is a hash based RNG that is cryptographically secure and has
|
||||
|
||||
#. passed the BigCrush tests
|
||||
|
||||
#. can Skip forward an arbitrary distance (up to 2^256) in O(1) time
|
||||
|
||||
We use Skip functionality to place each site in an independent well separated stream.
|
||||
The Skip was trivially parallelised, important in a many core node,
|
||||
and gives very low overhead parallel RNG initialisation.
|
||||
|
||||
Our implementation of parallel RNG
|
||||
|
||||
* Has passed the BigCrush tests **drawing once from each site RNG** in a round robin fashion.
|
||||
|
||||
This test is applied in `tests/testu01/Test_smallcrush.cc`
|
||||
|
||||
The interface is as follows::
|
||||
|
||||
```c++
|
||||
class GridSerialRNG {
|
||||
GridSerialRNG();
|
||||
void SeedFixedIntegers(const std::vector<int> &seeds);
|
||||
}
|
||||
|
||||
class GridParallelRNG {
|
||||
GridParallelRNG(GridBase *grid);
|
||||
void SeedFixedIntegers(const std::vector<int> &seeds);
|
||||
}
|
||||
|
||||
template <class vobj> void random(GridParallelRNG &rng,Lattice<vobj> &l) { rng.fill(l,rng._uniform); }
|
||||
template <class vobj> void gaussian(GridParallelRNG &rng,Lattice<vobj> &l) { rng.fill(l,rng._gaussian); }
|
||||
|
||||
template <class sobj> void random(GridSerialRNG &rng,sobj &l) { rng.fill(l,rng._uniform ); }
|
||||
template <class sobj> void gaussian(GridSerialRNG &rng,sobj &l) { rng.fill(l,rng._gaussian ); }
|
||||
```
|
||||
|
||||
* Serial RNG's are used to assign scalar fields.
|
||||
|
||||
* Parallel RNG's are used to assign lattice fields and must subdivide the field grid (need not be conformable).
|
||||
|
||||
It is the API users responsibility to initialise, manage, save and restore these RNG state for their algorithm.
|
||||
In particular there is no single globally managed RNG state.
|
||||
|
||||
Input/Output routines are provided for saving and restoring RNG states.
|
||||
|
||||
`lib/parallelIO/BinaryIO.h`:
|
||||
|
||||
```c++
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Read a RNG; use IOobject and lexico map to an array of state
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
static void readRNG(GridSerialRNG &serial,
|
||||
GridParallelRNG ¶llel,
|
||||
std::string file,
|
||||
Integer offset,
|
||||
uint32_t &nersc_csum,
|
||||
uint32_t &scidac_csuma,
|
||||
uint32_t &scidac_csumb)
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Write a RNG; lexico map to an array of state and use IOobject
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
static void writeRNG(GridSerialRNG &serial,
|
||||
GridParallelRNG ¶llel,
|
||||
std::string file,
|
||||
Integer offset,
|
||||
uint32_t &nersc_csum,
|
||||
uint32_t &scidac_csuma,
|
||||
uint32_t &scidac_csumb)
|
||||
|
||||
lib/parallelIO/NerscIO.h::
|
||||
|
||||
void writeRNGState(GridSerialRNG &serial,GridParallelRNG ¶llel,std::string file);
|
||||
|
||||
void readRNG(GridSerialRNG &serial,
|
||||
GridParallelRNG ¶llel,
|
||||
std::string file,
|
||||
Integer offset,
|
||||
uint32_t &nersc_csum,
|
||||
uint32_t &scidac_csuma,
|
||||
uint32_t &scidac_csumb);
|
||||
```
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
NerscIO::writeRNGState(sRNG,pRNG,rfile);
|
||||
```
|
||||
@@ -1,443 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Tensor classes"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/tensor_classes.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
The Tensor data structures are built up from fundamental
|
||||
scalar matrix and vector classes:
|
||||
|
||||
```c++
|
||||
template<class vobj > class iScalar { private: vobj _internal ; }
|
||||
template<class vobj,int N> class iVector { private: vobj _internal[N] ; }
|
||||
template<class vobj,int N> class iMatrix { private: vobj _internal[N] ; }
|
||||
```
|
||||
|
||||
These are template classes and can be passed a fundamental scalar or vector type, or
|
||||
nested to form arbitrarily complicated tensor products of indices. All mathematical expressions
|
||||
are defined to operate recursively, index by index.
|
||||
|
||||
Presently the constants
|
||||
|
||||
* `Nc`
|
||||
* `Nd`
|
||||
|
||||
are globally predefined. However, this is planned for changed in future and policy classes
|
||||
for different theories (e.g. QCD, QED, SU2 etc...) will contain these constants and enable multiple
|
||||
theories to coexist more naturally.
|
||||
|
||||
Arbitrary tensor products of fundamental scalar, vector
|
||||
and matrix objects may be formed in principle by the basic Grid code.
|
||||
|
||||
For Lattice field theory, we define types according to the following tensor
|
||||
product structure ordering. The suffix "D" indicates either double types, and
|
||||
replacing with "F" gives the corresponding single precision type.
|
||||
|
||||
|Lattice | Lorentz | Spin | Colour | scalar_type | Field |
|
||||
|---------|----------|-----------|----------|-------------|--------------------------|
|
||||
|Scalar | Scalar | Scalar | Scalar | RealD | RealD |
|
||||
|Scalar | Scalar | Scalar | Scalar | ComplexD | ComplexD |
|
||||
|Scalar | Scalar | Scalar | Matrix | ComplexD | ColourMatrixD |
|
||||
|Scalar | Vector | Scalar | Matrix | ComplexD | LorentzColourMatrixD |
|
||||
|Scalar | Scalar | Vector | Vector | ComplexD | SpinColourVectorD |
|
||||
|Scalar | Scalar | Vector | Vector | ComplexD | HalfSpinColourVectorD |
|
||||
|Scalar | Scalar | Matrix | Matrix | ComplexD | SpinColourMatrixD |
|
||||
|---------|----------|-----------|----------|-------------|--------------------------|
|
||||
|
||||
The types are implemented via a recursive tensor nesting system.
|
||||
|
||||
**Example** we declare:
|
||||
|
||||
```c++
|
||||
template<typename vtype>
|
||||
using iLorentzColourMatrix = iVector<iScalar<iMatrix<vtype, Nc> >, Nd > ;
|
||||
|
||||
typedef iLorentzColourMatrix<ComplexD > LorentzColourMatrixD;
|
||||
```
|
||||
|
||||
**Example** we declare:
|
||||
|
||||
```c++
|
||||
template<typename vtype>
|
||||
using iLorentzColourMatrix = iVector<iScalar<iMatrix<vtype, Nc> >, Nd > ;
|
||||
|
||||
typedef iLorentzColourMatrix<ComplexD > LorentzColourMatrixD;
|
||||
```
|
||||
|
||||
Arbitrarily deep tensor nests may be formed. Grid uses a positional and numerical rule to associate indices for contraction
|
||||
in the Einstein summation sense.
|
||||
|
||||
|----------------|---------|------------|
|
||||
| Symbolic name | Number | Position |
|
||||
|----------------|---------|------------|
|
||||
|`LorentzIndex` | 0 | left |
|
||||
|`SpinIndex` | 1 | middle |
|
||||
|`ColourIndex` | 2 | right |
|
||||
|----------------|---------|------------|
|
||||
|
||||
The conventions are that the index ordering left to right are: Lorentz, Spin, Colour. A scalar type (either real
|
||||
or complex, single or double precision) is be provided to the innermost structure.
|
||||
|
||||
|
||||
### Tensor arithmetic rules (`lib/tensors/Tensor_arith.h`)
|
||||
|
||||
Arithmetic rules are defined on these types
|
||||
|
||||
The multiplication operator follows the natural multiplication
|
||||
table for each index, index level by index level.
|
||||
|
||||
`Operator *`
|
||||
|
||||
|----|----|----|----|
|
||||
| x | S | V | M |
|
||||
|----|----|----|----|
|
||||
| S | S | V | M |
|
||||
| V | S | S | V |
|
||||
| M | M | V | M |
|
||||
|----|----|----|----|
|
||||
|
||||
The addition and subtraction rules disallow a scalar to be added to a vector,
|
||||
and vector to be added to matrix. A scalar adds to a matrix on the diagonal.
|
||||
|
||||
`Operator +` and `Operator -`
|
||||
|
||||
|----|----|----|----|
|
||||
| +/-| S | V | M |
|
||||
|----|----|----|----|
|
||||
| S | S | - | M |
|
||||
| V | - | V | - |
|
||||
| M | M | - | M |
|
||||
|----|----|----|----|
|
||||
|
||||
|
||||
The rules for a nested objects are recursively inferred level by level from basic rules of multiplication
|
||||
addition and subtraction for scalar/vector/matrix. Legal expressions can only be formed between objects
|
||||
with the same number of nested internal indices. All the Grid QCD datatypes have precisely three internal
|
||||
indices, some of which may be trivial scalar to enable expressions to be formed.
|
||||
|
||||
Arithmetic operations are possible where the left or right operand is a scalar type.
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeColourMatrixD U(grid);
|
||||
LatticeColourMatrixD Udag(grid);
|
||||
|
||||
Udag = adj(U);
|
||||
|
||||
RealD unitary_err = norm2(U*adj(U) - 1.0);
|
||||
```
|
||||
|
||||
Will provide a measure of how discrepant from unitarity the matrix U is.
|
||||
|
||||
### Internal index manipulation (`lib/tensors/Tensor_index.h`)
|
||||
|
||||
General code can access any specific index by number with a peek/poke semantic:
|
||||
|
||||
```c++
|
||||
// peek index number "Level" of a vector index
|
||||
template<int Level,class vtype> auto peekIndex (const vtype &arg,int i);
|
||||
|
||||
// peek index number "Level" of a vector index
|
||||
template<int Level,class vtype> auto peekIndex (const vtype &arg,int i,int j);
|
||||
|
||||
// poke index number "Level" of a vector index
|
||||
template<int Level,class vtype>
|
||||
void pokeIndex (vtype &pokeme,arg,int i)
|
||||
|
||||
// poke index number "Level" of a matrix index
|
||||
template<int Level,class vtype>
|
||||
void pokeIndex (vtype &pokeme,arg,int i,int j)
|
||||
```
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
for (int mu = 0; mu < Nd; mu++) {
|
||||
U[mu] = PeekIndex<LorentzIndex>(Umu, mu);
|
||||
}
|
||||
```
|
||||
|
||||
Similar to the QDP++ package convenience routines are provided to access specific elements of
|
||||
vector and matrix internal index types by physics name or meaning aliases for the above routines
|
||||
with the appropriate index constant.
|
||||
|
||||
* `peekColour`
|
||||
* `peekSpin`
|
||||
* `peekLorentz`
|
||||
|
||||
and
|
||||
|
||||
* `pokeColour`
|
||||
* `pokeSpin`
|
||||
* `pokeLorentz`
|
||||
|
||||
For example, we often store Gauge Fields with a Lorentz index, but can split them into
|
||||
polarisations in relevant pieces of code.
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
for (int mu = 0; mu < Nd; mu++) {
|
||||
U[mu] = peekLorentz(Umu, mu);
|
||||
}
|
||||
```
|
||||
|
||||
For convenience, direct access as both an l-value and an r-value is provided by the parenthesis operator () on each of the Scalar, Vector and Matrix classes.
|
||||
For example one may write
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
ColourMatrix A, B;
|
||||
A()()(i,j) = B()()(j,i);
|
||||
```
|
||||
|
||||
bearing in mind that empty parentheses are need to address a scalar entry in the tensor index nest.
|
||||
|
||||
The first (left) empty parentheses move past the (scalar) Lorentz level in the tensor nest, and the second
|
||||
(middle) empty parantheses move past the (scalar) spin level. The (i,j) index the colour matrix.
|
||||
|
||||
Other examples are easy to form for the many cases, and should be obvious to the reader.
|
||||
This form of addressing is convenient and saves peek, modifying, poke
|
||||
multiple temporary objects when both spin and colour indices are being accessed.
|
||||
There are many cases where multiple lines of code are required with a peek/poke semantic which are
|
||||
easier with direct l-value and r-value addressing.
|
||||
|
||||
|
||||
### Matrix operations
|
||||
|
||||
Transposition and tracing specific internal indices are possible using:
|
||||
|
||||
```c++
|
||||
template<int Level,class vtype>
|
||||
auto traceIndex (const vtype &arg)
|
||||
|
||||
template<int Level,class vtype>
|
||||
auto transposeIndex (const vtype &arg)
|
||||
```
|
||||
|
||||
These may be used as
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeColourMatrixD Link(grid);
|
||||
ComplexD link_trace = traceIndex<ColourIndex> (Link);
|
||||
```
|
||||
|
||||
Again, convenience aliases for QCD naming schemes are provided via
|
||||
|
||||
* `traceColour`
|
||||
* `traceSpin`
|
||||
|
||||
* `transposeColour`
|
||||
* `transposeSpin`
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
ComplexD link_trace = traceColour (Link);
|
||||
```
|
||||
|
||||
The operations only makes sense for matrix and scalar internal indices.
|
||||
|
||||
The trace and transpose over all indices is also defined for matrix and scalar types:
|
||||
|
||||
```c++
|
||||
template<class vtype,int N>
|
||||
auto trace(const iMatrix<vtype,N> &arg) -> iScalar
|
||||
|
||||
template<class vtype,int N>
|
||||
auto transpose(const iMatrix<vtype,N> &arg ) -> iMatrix
|
||||
```
|
||||
|
||||
Similar functions are:
|
||||
|
||||
* `conjugate`
|
||||
* `adjoint`
|
||||
|
||||
The traceless anti-Hermitian part is taken with:
|
||||
|
||||
```c++
|
||||
template<class vtype,int N> iMatrix<vtype,N>
|
||||
Ta(const iMatrix<vtype,N> &arg)
|
||||
```
|
||||
|
||||
Reunitarisation (or reorthogonalisation) is enabled by:
|
||||
|
||||
```c++
|
||||
template<class vtype,int N> iMatrix<vtype,N>
|
||||
ProjectOnGroup(const iMatrix<vtype,N> &arg)
|
||||
```
|
||||
|
||||
**Example**:
|
||||
|
||||
```c++
|
||||
LatticeColourMatrixD Mom(grid);
|
||||
LatticeColourMatrixD TaMom(grid);
|
||||
TaMom = Ta(Mom);
|
||||
```
|
||||
|
||||
### Querying internal index structure
|
||||
|
||||
Templated code may find it useful to use query functions on the Grid datatypes they are provided.
|
||||
For example general Serialisation and I/O code can inspect the nature of a type a routine has been
|
||||
asked to read from disk, or even generate descriptive type strings:
|
||||
|
||||
```c++
|
||||
////////////////////////////////////////////////////
|
||||
// Support type queries on template params:
|
||||
////////////////////////////////////////////////////
|
||||
// int _ColourScalar = isScalar<ColourIndex,vobj>();
|
||||
// int _ColourVector = isVector<ColourIndex,vobj>();
|
||||
// int _ColourMatrix = isMatrix<ColourIndex,vobj>();
|
||||
template<int Level,class vtype> int isScalar(void)
|
||||
template<int Level,class vtype> int isVector(void)
|
||||
template<int Level,class vtype> int isMatrix(void)
|
||||
```
|
||||
|
||||
**Example** (`lib/parallelIO/IldgIO.h`):
|
||||
|
||||
```c++
|
||||
template<class vobj> std::string ScidacRecordTypeString(int &colors, int &spins, int & typesize,int &datacount) {
|
||||
|
||||
/////////////////////////////////////////
|
||||
// Encode a generic tensor as a string
|
||||
/////////////////////////////////////////
|
||||
|
||||
typedef typename getPrecision<vobj>::real_scalar_type stype;
|
||||
|
||||
int _ColourN = indexRank<ColourIndex,vobj>();
|
||||
int _ColourScalar = isScalar<ColourIndex,vobj>();
|
||||
int _ColourVector = isVector<ColourIndex,vobj>();
|
||||
int _ColourMatrix = isMatrix<ColourIndex,vobj>();
|
||||
|
||||
int _SpinN = indexRank<SpinIndex,vobj>();
|
||||
int _SpinScalar = isScalar<SpinIndex,vobj>();
|
||||
int _SpinVector = isVector<SpinIndex,vobj>();
|
||||
int _SpinMatrix = isMatrix<SpinIndex,vobj>();
|
||||
|
||||
int _LorentzN = indexRank<LorentzIndex,vobj>();
|
||||
int _LorentzScalar = isScalar<LorentzIndex,vobj>();
|
||||
int _LorentzVector = isVector<LorentzIndex,vobj>();
|
||||
int _LorentzMatrix = isMatrix<LorentzIndex,vobj>();
|
||||
|
||||
std::stringstream stream;
|
||||
|
||||
stream << "GRID_";
|
||||
stream << ScidacWordMnemonic<stype>();
|
||||
|
||||
if ( _LorentzVector ) stream << "_LorentzVector"<<_LorentzN;
|
||||
if ( _LorentzMatrix ) stream << "_LorentzMatrix"<<_LorentzN;
|
||||
|
||||
if ( _SpinVector ) stream << "_SpinVector"<<_SpinN;
|
||||
if ( _SpinMatrix ) stream << "_SpinMatrix"<<_SpinN;
|
||||
|
||||
if ( _ColourVector ) stream << "_ColourVector"<<_ColourN;
|
||||
if ( _ColourMatrix ) stream << "_ColourMatrix"<<_ColourN;
|
||||
|
||||
if ( _ColourScalar && _LorentzScalar && _SpinScalar ) stream << "_Complex";
|
||||
|
||||
typesize = sizeof(typename vobj::scalar_type);
|
||||
|
||||
if ( _ColourMatrix ) typesize*= _ColourN*_ColourN;
|
||||
else typesize*= _ColourN;
|
||||
|
||||
if ( _SpinMatrix ) typesize*= _SpinN*_SpinN;
|
||||
else typesize*= _SpinN;
|
||||
|
||||
};
|
||||
```
|
||||
|
||||
### Inner and outer products
|
||||
|
||||
We recursively define (`tensors/Tensor_inner.h`), ultimately returning scalar in all indices:
|
||||
|
||||
```c++
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// innerProduct Scalar x Scalar -> Scalar
|
||||
// innerProduct Vector x Vector -> Scalar
|
||||
// innerProduct Matrix x Matrix -> Scalar
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
template<class l,class r>
|
||||
auto innerProductD (const iScalar<l>& lhs,const iScalar<r>& rhs)
|
||||
|
||||
template<class l,class r,int N>
|
||||
auto innerProductD (const iVector<l,N>& lhs,const iVector<r,N>& rhs)
|
||||
|
||||
template<class l,class r,int N>
|
||||
auto innerProductD (const iMatrix<l,N>& lhs,const iMatrix<r,N>& rhs)
|
||||
|
||||
template<class l,class r>
|
||||
auto innerProduct (const iScalar<l>& lhs,const iScalar<r>& rhs)
|
||||
|
||||
template<class l,class r,int N>
|
||||
auto innerProduct (const iVector<l,N>& lhs,const iVector<r,N>& rhs)
|
||||
|
||||
template<class l,class r,int N>
|
||||
auto innerProduct (const iMatrix<l,N>& lhs,const iMatrix<r,N>& rhs)
|
||||
```
|
||||
|
||||
The sum is always performed in double precision for the `innerProductD` variant.
|
||||
|
||||
We recursively define (`tensors/Tensor_outer.h`):
|
||||
|
||||
```c++
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// outerProduct Scalar x Scalar -> Scalar
|
||||
// Vector x Vector -> Matrix
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
template<class l,class r>
|
||||
auto outerProduct (const iScalar<l>& lhs,const iScalar<r>& rhs)
|
||||
|
||||
template<class l,class r,int N>
|
||||
auto outerProduct (const iVector<l,N>& lhs,const iVector<r,N>& rhs)
|
||||
```
|
||||
|
||||
### Functions of Tensor
|
||||
|
||||
The following unary functions are defined, which operate element by element on a tensor
|
||||
data structure:
|
||||
|
||||
```c++
|
||||
sqrt();
|
||||
rsqrt();
|
||||
sin();
|
||||
cos();
|
||||
asin();
|
||||
acos();
|
||||
log();
|
||||
exp();
|
||||
abs();
|
||||
Not();
|
||||
toReal();
|
||||
toComplex();
|
||||
```
|
||||
|
||||
Element wise functions are defined for::
|
||||
|
||||
```c++
|
||||
div(tensor,Integer);
|
||||
mod(tensor,Integer);
|
||||
pow(tensor,RealD);
|
||||
```
|
||||
|
||||
Matrix exponentiation (as opposed to element wise exponentiation is implemented via power series in::
|
||||
|
||||
```c++
|
||||
Exponentiate(const Tensor &r ,RealD alpha, Integer Nexp = DEFAULT_MAT_EXP)
|
||||
```
|
||||
|
||||
the exponentiation is distributive across vector indices (i.e. proceeds component by component for a `LorentzColourMatrix`).
|
||||
|
||||
Determinant is similar::
|
||||
|
||||
```c++
|
||||
iScalar Determinant(const Tensor &r )
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
---
|
||||
title : "API Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Vectorisation"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/API/vectorisation.html
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
|
||||
Internally, Grid defines a portable abstraction SIMD vectorisation, via the following types:
|
||||
|
||||
* `vRealF`
|
||||
|
||||
* `vRealD`
|
||||
|
||||
* `vComplexF`
|
||||
|
||||
* `vComplexD`
|
||||
|
||||
These have the usual range of arithmetic operators and functions acting upon them. They do not form
|
||||
part of the API, but are mentioned to (partially) explain the need for controlling the
|
||||
layout transformation in lattice objects.
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Reporting an issue"
|
||||
header:
|
||||
overlay_color: "#C70039"
|
||||
permalink: /docs/bug_report/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
|
||||
|
||||
__To help us tracking and solving more efficiently issues with Grid, please report problems using the [issue system of GitHub](https://github.com/paboyle/Grid/issues) rather than sending emails to Grid developers.__
|
||||
|
||||
We also suggest to have a brief look at the [closed issues pages](https://github.com/paboyle/Grid/issues?q=is%3Aissue+is%3Aclosed) and check whether the problem has been addressed already.
|
||||
|
||||
{% capture notice-text %}
|
||||
1. Check that the code is pointing to the `HEAD` of `develop` or any commit in `master` which is tagged with a version number.
|
||||
2. Give a description of the target platform (CPU, network, compiler). Please give the full CPU part description, using for example `cat /proc/cpuinfo | grep 'model name' | uniq` (Linux) or `sysctl machdep.cpu.brand_string` (macOS) and the full output the `--version` option of your compiler.
|
||||
3. Give the exact `configure` command used.
|
||||
4. Attach `config.log`.
|
||||
5. Attach `grid.config.summary`.
|
||||
6. Attach the output of `make V=1`.
|
||||
7. Describe the issue and any previous attempt to solve it. If relevant, show how to reproduce the issue using a minimal working example.
|
||||
{% endcapture %}
|
||||
|
||||
<div class="notice--warning">
|
||||
<h4>When you file an issue, please go though the following checklist:</h4>
|
||||
{{ notice-text | markdownify }}
|
||||
</div>
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Supported communication interfaces"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/comm_interfaces/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include base_path %}
|
||||
|
||||
The following options can be used with the `--enable-comms=` option to target different communication interfaces:
|
||||
|
||||
| `<comm>` | Description |
|
||||
| ------------- | -------------------------------------------- |
|
||||
| `none` | no communications |
|
||||
| `mpi` | MPI communications using [MPI-3 shared memory](https://software.intel.com/sites/default/files/managed/eb/54/An_Introduction_to_MPI-3.pdf) |
|
||||
| `mpi-auto` | MPI communications with compiler CXX but clone flags from MPICXX |
|
||||
|
||||
For the MPI interfaces the optional `-auto` suffix instructs the `configure` scripts to determine all the necessary compilation and linking flags. This is done by extracting the informations from the MPI wrapper specified in the environment variable `MPICXX` (if not specified `configure` will scan though a list of default names). The `-auto` suffix is not supported by the Cray environment wrapper scripts. Use the standard wrappers ( `CXX=CC` ) set up by Cray `PrgEnv` modules instead.
|
||||
|
||||
### Shared memory communications support
|
||||
|
||||
The following options can be use with the `--enable-shm=` option to target different shared memory behaviours (default `shmopen`):
|
||||
|
||||
| `<shm>` | Description |
|
||||
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `shmnone` | uses anonymous spaces, use only for 1 MPI rank per node |
|
||||
| `shmopen` | uses `shm_open` to allocate a shared memory space for inter socket communications. Uses a unique file name in `/dev/shm` associated to the user. |
|
||||
| `hugetlbfs` | optional [libhugetlbfs](https://github.com/libhugetlbfs/libhugetlbfs) support to map the shared memory allocation into huge 2M pages |
|
||||
|
||||
|
||||
### Other flags
|
||||
|
||||
`--enable-shmpath=<path>` to select the shared memory map base path for [libhugetlbfs](https://github.com/libhugetlbfs/libhugetlbfs).
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,51 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Execution model"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/execution-model/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
Grid is intended to support performance portability across a many of platforms ranging from single processors
|
||||
to message passing CPU clusters and accelerated computing nodes.
|
||||
|
||||
The library provides data parallel C++ container classes with internal memory layout that is transformed to map efficiently to SIMD architectures. CSHIFT facilities are provided, similar to HPF and cmfortran, and user control is given over the mapping of array indices to both MPI tasks and SIMD processing elements.
|
||||
|
||||
Identically shaped arrays then be processed with perfect data parallelisation.
|
||||
Such identically shaped arrays are called conformable arrays.
|
||||
The transformation is based on the observation that Cartesian array processing involves identical processing to be performed on different regions of the Cartesian array.
|
||||
|
||||
The library will both geometrically decompose into MPI tasks and across SIMD lanes. Local vector loops are parallelised with OpenMP pragmas.
|
||||
|
||||
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification for most programmers.
|
||||
|
||||
The two broad optimisation targets are:
|
||||
|
||||
* MPI, OpenMP, and SIMD parallelism
|
||||
|
||||
Presently SSE4, ARM NEON (128 bits) AVX, AVX2, QPX (256 bits), and AVX512 (512 bits) targets are supported
|
||||
with aggressive use of architecture vectorisation intrinsic functions.
|
||||
|
||||
* MPI between nodes with and data parallel offload to GPU's.
|
||||
|
||||
For the latter generic C++ code is used both on the host and on the GPU, with a common vectorisation
|
||||
granularity.
|
||||
|
||||
### Accelerator memory model
|
||||
|
||||
For accelerator targets it is assumed that heap allocations can be shared between the CPU
|
||||
and the accelerator. This corresponds to lattice fields having their memory allocated with
|
||||
*cudaMallocManaged* with Nvidia GPU's.
|
||||
|
||||
Grid does not assume that stack or data segments share a common address space with an accelerator.
|
||||
|
||||
* This constraint presently rules out porting Grid to AMD GPU's which do not support managed memory.
|
||||
|
||||
* At some point in the future a cacheing strategy may be implemented to enable running on AMD GPU's
|
||||
|
||||
This document was updated on March 2018.
|
||||
{: .notice}
|
||||
|
||||
@@ -1,213 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Building on Intel and AMD targets"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/general_build/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include base_path %}
|
||||
The information included in this page has been updated on *March 2018* and it is valid for the [release version 0.7.0](https://github.com/paboyle/Grid/tree/release/v0.7.0).
|
||||
|
||||
{% include toc icon="gears" title="Contents" %}
|
||||
|
||||
### Building for the Intel Knights Landing
|
||||
|
||||
The following configuration is recommended for the [Intel Knights Landing](http://ark.intel.com/products/codename/48999/Knights-Landing) platform:
|
||||
|
||||
``` text
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=KNL \
|
||||
--enable-comms=mpi-auto \
|
||||
--with-gmp=<path> \
|
||||
--with-mpfr=<path> \
|
||||
--enable-mkl \
|
||||
CXX=icpc MPICXX=mpiicpc
|
||||
```
|
||||
|
||||
where `<path>` is the UNIX prefix where GMP and MPFR are installed. If you are working on a Cray machine that does not use the `mpiicpc` wrapper, please use:
|
||||
|
||||
``` text
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=KNL \
|
||||
--enable-comms=mpi \
|
||||
--with-gmp=<path> \
|
||||
--with-mpfr=<path> \
|
||||
--enable-mkl \
|
||||
CXX=CC CC=cc
|
||||
```
|
||||
|
||||
### Building for the Intel Haswell
|
||||
|
||||
|
||||
The following configuration is recommended for the [Intel Haswell platform](https://ark.intel.com/products/codename/42174/Haswell):
|
||||
|
||||
```bash
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=AVX2 \
|
||||
--enable-comms=mpi-auto \
|
||||
--enable-mkl \
|
||||
CXX=icpc MPICXX=mpiicpc
|
||||
```
|
||||
|
||||
The MKL flag enables use of BLAS and FFTW from the Intel Math Kernels Library.
|
||||
|
||||
If gmp and mpfr are NOT in standard places (`/usr/`) these flags may be needed:
|
||||
|
||||
```bash
|
||||
--with-gmp=<path> \
|
||||
--with-mpfr=<path>
|
||||
```
|
||||
|
||||
where `<path>` is the UNIX prefix where GMP and MPFR are installed.
|
||||
|
||||
If you are working on a Cray machine that does not use the `mpiicpc` wrapper, please use:
|
||||
|
||||
```bash
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=AVX2 \
|
||||
--enable-comms=mpi \
|
||||
--enable-mkl \
|
||||
CXX=CC CC=cc
|
||||
```
|
||||
|
||||
If using the Intel MPI library, threads should be pinned to NUMA domains using:
|
||||
|
||||
```bash
|
||||
export I_MPI_PIN=1
|
||||
```
|
||||
This is the default.
|
||||
|
||||
### Building for the Intel Skylake
|
||||
|
||||
The following configuration is recommended for the [Intel Skylake platform](https://ark.intel.com/products/codename/37572/Skylake):
|
||||
|
||||
```bash
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=AVX512 \
|
||||
--enable-comms=mpi-auto \
|
||||
--enable-mkl \
|
||||
CXX=mpiicpc
|
||||
```
|
||||
|
||||
The MKL flag enables use of BLAS and FFTW from the Intel Math Kernels Library.
|
||||
|
||||
If gmp and mpfr are NOT in standard places (`/usr/`) these flags may be needed:
|
||||
|
||||
```bash
|
||||
--with-gmp=<path> \
|
||||
--with-mpfr=<path> \
|
||||
```
|
||||
|
||||
where `<path>` is the UNIX prefix where GMP and MPFR are installed.
|
||||
|
||||
If you are working on a Cray machine that does not use the `mpiicpc` wrapper, please use:
|
||||
|
||||
``` bash
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=AVX512 \
|
||||
--enable-comms=mpi \
|
||||
--enable-mkl \
|
||||
CXX=CC CC=cc
|
||||
```
|
||||
|
||||
If using the Intel MPI library, threads should be pinned to NUMA domains using:
|
||||
|
||||
```bash
|
||||
export I_MPI_PIN=1
|
||||
```
|
||||
|
||||
This is the default.
|
||||
|
||||
### Building for the AMD Epyc
|
||||
|
||||
The [AMD EPYC](https://www.amd.com/en/products/epyc) is a multichip module comprising 32 cores spread over four distinct chips each with 8 cores.
|
||||
So, even with a single socket node there is a quad-chip module. Dual socket nodes with 64 cores total
|
||||
are common. Each chip within the module exposes a separate NUMA domain.
|
||||
There are four NUMA domains per socket and we recommend one MPI rank per NUMA domain.
|
||||
MPI-3 is recommended with the use of four ranks per socket,
|
||||
and 8 threads per rank.
|
||||
|
||||
The following configuration is recommended for the AMD EPYC platform:
|
||||
|
||||
```bash
|
||||
../configure --enable-precision=double\
|
||||
--enable-simd=AVX2 \
|
||||
--enable-comms=mpi3 \
|
||||
CXX=mpicxx
|
||||
```
|
||||
|
||||
If `gmp` and `mpfr` are NOT in standard places (`/usr/`) these flags may be needed::
|
||||
|
||||
```bash
|
||||
--with-gmp=<path> \
|
||||
--with-mpfr=<path>
|
||||
```
|
||||
|
||||
where `<path>` is the UNIX prefix where GMP and MPFR are installed.
|
||||
|
||||
Using MPICH and g++ v4.9.2, best performance can be obtained using explicit GOMP_CPU_AFFINITY flags for each MPI rank.
|
||||
This can be done by invoking MPI on a wrapper script omp_bind.sh to handle this.
|
||||
|
||||
It is recommended to run 8 MPI ranks on a single dual socket AMD EPYC, with 8 threads per rank using MPI3 and
|
||||
shared memory to communicate within this node:
|
||||
|
||||
```bash
|
||||
mpirun -np 8 ./omp_bind.sh ./Benchmark_dwf --mpi 2.2.2.1 --dslash-unroll --threads 8 --grid 16.16.16.16 --cacheblocking 4.4.4.4
|
||||
```
|
||||
|
||||
Where omp_bind.sh does the following:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
numanode=` expr $PMI_RANK % 8 `
|
||||
basecore=`expr $numanode \* 16`
|
||||
core0=`expr $basecore + 0 `
|
||||
core1=`expr $basecore + 2 `
|
||||
core2=`expr $basecore + 4 `
|
||||
core3=`expr $basecore + 6 `
|
||||
core4=`expr $basecore + 8 `
|
||||
core5=`expr $basecore + 10 `
|
||||
core6=`expr $basecore + 12 `
|
||||
core7=`expr $basecore + 14 `
|
||||
|
||||
export GOMP_CPU_AFFINITY="$core0 $core1 $core2 $core3 $core4 $core5 $core6 $core7"
|
||||
echo GOMP_CUP_AFFINITY $GOMP_CPU_AFFINITY
|
||||
|
||||
$@
|
||||
```
|
||||
|
||||
### Build setup for laptops, other compilers, non-cluster builds
|
||||
|
||||
Many versions of `g++` and `clang++` work with Grid, and involve merely replacing `CXX` (and `MPICXX`),
|
||||
and omit the `enable-mkl` flag.
|
||||
|
||||
Single node, non MPI builds are enabled with:
|
||||
|
||||
```bash
|
||||
--enable-comms=none
|
||||
```
|
||||
|
||||
FFTW support that is not in the default search path may then enabled with:
|
||||
|
||||
```bash
|
||||
--with-fftw=<installpath>
|
||||
```
|
||||
|
||||
BLAS will not be compiled in by default, and Lanczos will default to Eigen diagonalisation.
|
||||
|
||||
|
||||
|
||||
### Notes
|
||||
|
||||
- [GMP](https://gmplib.org/) is the GNU Multiple Precision Library.
|
||||
- [MPFR](http://www.mpfr.org/) is a C library for multiple-precision floating-point computations with correct rounding.
|
||||
- Both libaries are necessary for the RHMC support.
|
||||
|
||||
|
||||
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,185 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Quick start guide"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/quick-start-guide/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include toc icon="gears" title="Quick-start" %}
|
||||
|
||||
Please send all pull requests to the `develop` branch.
|
||||
{: .notice--warning}
|
||||
|
||||
## Requirements
|
||||
|
||||
### Required libraries
|
||||
|
||||
* [GMP](https://gmplib.org/) is the GNU Multiple Precision Library (RHMC support).
|
||||
* [MPFR](http://www.mpfr.org/) is a C library for multiple-precision floating-point computations with correct rounding (RHMC support).
|
||||
* [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page): bootstrapping GRID downloads and uses for internal dense matrix (non-QCD operations) the Eigen library.
|
||||
|
||||
Grid optionally uses:
|
||||
|
||||
* [HDF5](https://support.hdfgroup.org/HDF5/) for structured data I/O
|
||||
|
||||
* [LIME](http://usqcd-software.github.io/c-lime/) for ILDG and SciDAC file format support.
|
||||
|
||||
* [FFTW](http://www.fftw.org/) either generic version or via the Intel MKL library.
|
||||
|
||||
* [LAPACK](http://www.netlib.org/lapack/) either generic version or Intel MKL library.
|
||||
|
||||
|
||||
### Compilers
|
||||
|
||||
* Intel ICPC v17 and later
|
||||
|
||||
* Clang v3.5 and later (need 3.8 and later for OpenMP)
|
||||
|
||||
* GCC v4.9.x
|
||||
|
||||
* GCC v6.3 and later (recommended)
|
||||
|
||||
**Important:**
|
||||
|
||||
Some versions of GCC appear to have a bug under high optimisation (-O2, -O3).
|
||||
|
||||
The safety of these compiler versions cannot be guaranteed at this time. Follow [Issue 100](https://github.com/paboyle/Grid/issues/100) for details and updates.
|
||||
|
||||
GCC v5.x, v6.1, v6.2
|
||||
|
||||
|
||||
|
||||
|
||||
## Quick start
|
||||
First, start by cloning the repository:
|
||||
|
||||
``` bash
|
||||
git clone https://github.com/paboyle/Grid.git
|
||||
```
|
||||
|
||||
Then enter the cloned directory and set up the build system:
|
||||
|
||||
```bash
|
||||
cd Grid
|
||||
./bootstrap.sh
|
||||
```
|
||||
|
||||
Now you can execute the `configure` script to generate makefiles as in this example (here from a build directory):
|
||||
|
||||
``` bash
|
||||
mkdir build
|
||||
cd build
|
||||
../configure --enable-precision=double --enable-simd=AVX --enable-comms=mpi-auto --prefix=<path>
|
||||
```
|
||||
|
||||
where:
|
||||
|
||||
``` bash
|
||||
--enable-precision=single|double
|
||||
```
|
||||
|
||||
sets the **default precision**. Since this is largely a benchmarking convenience, it is anticipated that the default precision may be removed in future implementations, and that explicit type selection be made at all points. Naturally, most code will be type templated in any case.::
|
||||
|
||||
``` bash
|
||||
--enable-simd=GEN|SSE4|AVX|AVXFMA|AVXFMA4|AVX2|AVX512|NEONv8|QPX
|
||||
```
|
||||
|
||||
sets the **SIMD architecture**,
|
||||
|
||||
``` bash
|
||||
--enable-comms=mpi|none
|
||||
```
|
||||
|
||||
selects whether to use MPI communication (mpi) or no communication (none).
|
||||
|
||||
``` bash
|
||||
--prefix=<path>
|
||||
```
|
||||
|
||||
should be passed the prefix path where you want to install Grid.
|
||||
|
||||
Other options are detailed in the next section, you can also use
|
||||
|
||||
```bash
|
||||
configure --help
|
||||
```
|
||||
|
||||
to display them.
|
||||
|
||||
Like with any other program using GNU autotool, the
|
||||
|
||||
```bash
|
||||
CXX, CXXFLAGS, LDFLAGS, ...
|
||||
```
|
||||
|
||||
environment variables can be modified to customise the build.
|
||||
|
||||
Finally, you can build and install Grid:
|
||||
|
||||
``` bash
|
||||
make
|
||||
make install #this is optional
|
||||
```
|
||||
|
||||
To minimise the build time, only the tests at the root of the `tests` directory are built by default. If you want to build tests in the sub-directory `<subdir>` you can execute:
|
||||
|
||||
``` bash
|
||||
make -C tests/<subdir> tests
|
||||
```
|
||||
If you want to build all the tests at once just use `make tests`.
|
||||
|
||||
## Build configuration options
|
||||
|
||||
A full list of configurations options is available with the `./configure --help` command:
|
||||
|
||||
* `--prefix=<path>`: installation prefix for Grid.
|
||||
|
||||
* `--with-gmp=<path>`: look for GMP in the UNIX prefix `<path>`
|
||||
|
||||
* `--with-mpfr=<path>`: look for MPFR in the UNIX prefix `<path>`
|
||||
|
||||
* `--with-fftw=<path>`: look for FFTW in the UNIX prefix `<path>`
|
||||
|
||||
* `--with-hdf5=<path>`: look for HDF5 in the UNIX prefix `<path>`
|
||||
|
||||
* `--with-lime=<path>`: look for the C-LIME library in the UNIX prefix `<path>`
|
||||
|
||||
* `--enable-sfw-fp16=<yes|no`: Enable software FP16 communications support (default `yes`)
|
||||
|
||||
* `--enable-lapack[=<path>]`: enable LAPACK support in Lanczos eigensolver. A UNIX prefix containing the library can be specified (optional).
|
||||
|
||||
* `--enable-mkl[=<path>]`: use Intel MKL for FFT (and LAPACK if enabled) routines. A UNIX prefix containing the library can be specified (optional).
|
||||
|
||||
* `--enable-numa`: enable [numa first touch policy](http://queue.acm.org/detail.cfm?id=2513149) optimization (default `no`)
|
||||
|
||||
* `--enable-simd=<code>`: setup Grid for the SIMD target `<code>` (default: `GEN`). [List of possible SIMD targets](/Grid/docs/simd_targets/).
|
||||
|
||||
* `--enable-gen-simd-width=<size>`: select the size (in bytes) of the generic SIMD vector type (default: 32 bytes).
|
||||
|
||||
* `--enable-precision={single|double}`: set the default precision (default: `double`).
|
||||
|
||||
* `--enable-comms=<comm>`: Use `<comm>` for message passing (default: `none`). [List of possible comm targets](/Grid/docs/comm_interfaces/).
|
||||
|
||||
* `--enable-shm=<shm>`: Use `<shm>` for shared memory behaviour (default: `shmopen`). [List of possible shm targets](/Grid/docs/comm_interfaces/).
|
||||
|
||||
* `--enable-shmpath=<path>`: Select `<path>` for the shared memory mmap base path for libhugetlbfs.
|
||||
|
||||
* `--enable-rng={sitmo|ranlux48|mt19937}` choose the RNG (default: `sitmo`).
|
||||
|
||||
* `--disable-timers`: disable system dependent high-resolution timers.
|
||||
|
||||
* `--enable-chroma`: enable Chroma regression tests. A compiled version of Chroma is assumed to be present.
|
||||
|
||||
* `--enable-doxygen-doc`: enable the Doxygen documentation generation (build with `make doxygen-doc`)
|
||||
|
||||
|
||||
{% if site.option=="web" %}
|
||||
More details on the *Getting started* menu entries on the left.
|
||||
{% endif %}
|
||||
|
||||
This document was updated on March 2018.
|
||||
{: .notice}
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Running on a Intel Knights Landing"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/running_knl/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include base_path %}
|
||||
{% include toc icon="gears" title="Contents" %}
|
||||
|
||||
These are few suggestions in order to get the best performance on the Intel Knights Landing (KNL).
|
||||
|
||||
|
||||
|
||||
### Bind the memory allocation to the MCDRAM NUMA node
|
||||
|
||||
The KNL has two memory systems, the DDR4 (~90 GFlops/s) and the High Bandwidth Memory (MCDRAM, ~400 Gflops/s).
|
||||
Each of the two memory system is attached to a different [NUMA context](https://software.intel.com/en-us/articles/optimizing-applications-for-numa).
|
||||
|
||||
On a KNL node the command `numactl --hardware` will report which NUMA context is connected to the faster MCDRAM.
|
||||
A typical report looks like this
|
||||
|
||||
``` text
|
||||
node 0 size: 98178 MB
|
||||
node 0 free: 92899 MB
|
||||
node 1 cpus:
|
||||
node 1 size: 16384 MB
|
||||
node 1 free: 15926 MB
|
||||
```
|
||||
|
||||
In this case the node 1 is related to the 16GB MCDRAM (this is the typical situation on KNLs)
|
||||
|
||||
To bind the memory allocation to NUMA node 1 use
|
||||
|
||||
``` bash
|
||||
numactl --membind 1 ./your-executable
|
||||
```
|
||||
|
||||
### Controlling threading
|
||||
|
||||
The number of threads can be set in GRID at runtime by the flag
|
||||
|
||||
``` text
|
||||
--threads <#threads>
|
||||
```
|
||||
|
||||
A finer control can be achieved using the environment variable `KMP_HW_SUBSETS` (or the deprecated `KMP_PLACE_THREADS`).
|
||||
|
||||
From the [Intel developer guide](https://software.intel.com/en-us/node/684313):
|
||||
|
||||
>The KMP_HW_SUBSETS variable controls the hardware resource that will be used by the program. This variable specifies the number of sockets to use, how many cores to use per socket and how many threads to assign per core. For example, on Intel® Xeon Phi™ coprocessors, while each coprocessor can take up to four threads, specifying fewer than four threads per core may result in a better performance. While specifying two threads per core often yields better performance than one thread per core, specifying three or four threads per core may or may not improve the performance. This variable enables you to conveniently measure the performance of up to four threads per core.
|
||||
|
||||
A typical setting for the best performance on a single node is to use **62 cores with 1 threads per code**, on the bash shell this is set by
|
||||
|
||||
``` bash
|
||||
export KMP_HW_SUBSETS=62c,1t
|
||||
```
|
||||
|
||||
### Using the optimised Wilson Dslash kernels
|
||||
|
||||
Beside the generic implementation using stencils, GRID has optimised version of the Dslash kernels (for Wilson and DWF fermions).
|
||||
|
||||
Flags at runtime can be used for the optimised paths
|
||||
|
||||
| Flag | Description |
|
||||
| --------------------- | --------------------------------------------------------------------- |
|
||||
| `--dslash-generic` | This is the default option and used the implementation with stencils |
|
||||
| `--dslash-unroll` | This explicitly unroll the colour loops. It is tied to `Nc=3` |
|
||||
| `--dslash-asm` | This is specific for AVX512-F architectures and `Nc=3` |
|
||||
|
||||
|
||||
|
||||
The information included in this page has been updated on *November 2016* and it is valid for the release version 0.6.0.
|
||||
{: .notice}
|
||||
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Supported SIMD architectures"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/simd_targets/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include base_path %}
|
||||
|
||||
The following options can be used for `--enable-simd=` flag to target different SIMD instruction sets:
|
||||
|
||||
| `<code>` | Description |
|
||||
| ----------- | -------------------------------------- |
|
||||
| `GEN` | generic portable vector code |
|
||||
| `SSE4` | SSE 4.2 (128 bit) |
|
||||
| `AVX` | AVX (256 bit) |
|
||||
| `AVXFMA` | AVX (256 bit) + FMA |
|
||||
| `AVXFMA4` | AVX (256 bit) + FMA4 |
|
||||
| `AVX2` | AVX 2 (256 bit) |
|
||||
| `AVX512` | AVX 512 bit |
|
||||
| `NEONv8` | [ARM NEON](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/ch07s03.html) (128 bit)
|
||||
| `QPX` | QPX (256 bit) |
|
||||
|
||||
Alternatively, some CPU codenames can be directly used:
|
||||
|
||||
| `<code>` | Description |
|
||||
| ----------- | -------------------------------------- |
|
||||
| `KNL` | [Intel Xeon Phi codename Knights Landing](http://ark.intel.com/products/codename/48999/Knights-Landing) |
|
||||
| `SKL` | [Intel Skylake with AVX512 support](https://ark.intel.com/products/codename/37572/Skylake) |
|
||||
| `BGQ` | Blue Gene/Q |
|
||||
|
||||
|
||||
#### Notes (Jan 2018):
|
||||
* We currently support AVX512 for the Intel compiler and GCC (KNL and SKL target). Support for clang will appear in future
|
||||
versions of Grid when the AVX512 support in the compiler is more advanced.
|
||||
* For BG/Q only [bgclang](http://trac.alcf.anl.gov/projects/llvm-bgq) is supported. We do not presently plan to support more compilers for this platform.
|
||||
* BG/Q performances are currently rather poor. This is being investigated for future versions.
|
||||
* The vector size for the `GEN` target can be specified with the `configure` script option `--enable-gen-simd-width`.
|
||||
|
||||
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Travis Continous Integration framework"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/travis/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
{% include base_path %}
|
||||
<!-- {% include toc icon="gears" title="Helpers" %} -->
|
||||
|
||||
For continous testing of every commit we use the [Travis CI framework](https://travis-ci.org/).
|
||||
|
||||
The current status is
|
||||
|
||||
| Branch | Status |
|
||||
|---------- | ------ |
|
||||
| [Master](https://travis-ci.org/paboyle/Grid) | [](https://travis-ci.org/paboyle/Grid) |
|
||||
| [Develop](https://travis-ci.org/paboyle/Grid) | [](https://travis-ci.org/paboyle/Grid) |
|
||||
| [Release 0.7.0](https://github.com/paboyle/Grid/tree/release/v0.7.0) | [](https://github.com/paboyle/Grid/tree/release/v0.7.0) |
|
||||
|
||||
|
||||
### Automated tests
|
||||
|
||||
Travis will test the compilation workflow for single and double precision version on the following compilers for each commit:
|
||||
|
||||
- clang 3.7.0 on Ubuntu 14.04
|
||||
- clang 3.8.0 on Ubuntu 14.04
|
||||
- gcc 5.4.1 on Ubuntu 14.04
|
||||
- gcc 4.9.4 on Ubuntu 14.04.1
|
||||
- Apple LLVM version 8.1.0 (clang-802.0.42) on OSX (x86_64-apple-darwin16.5.0)
|
||||
|
||||
Due to the limitations of the Travis virtual machines, the archictecture is limited to SSE4 and few tests.
|
||||
|
||||
May 2017: a new server using [TeamCity](https://www.jetbrains.com/teamcity/specials/teamcity/teamcity.html?gclid=CjwKEAjwutXIBRDV7-SDvdiNsUoSJACIlTqlygt_V8-PqWvjV23oAj8wf2suNmct9-sFfplBFYctzBoCnTvw_wcB&gclsrc=aw.ds.ds&dclid=COOh9rPt6dMCFYOmUQodkpwLfQ) is being setup for extensive testing of every commit.
|
||||
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,114 +0,0 @@
|
||||
---
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Using HMC"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
permalink: /docs/theories/hmc/
|
||||
sidebar:
|
||||
nav : docs
|
||||
---
|
||||
|
||||
Using HMC in Grid version 0.7.0
|
||||
|
||||
These are the instructions to use the Generalised HMC on Grid version 0.7.0.
|
||||
Disclaimer: GRID is still under active development so any information provided here can be changed in future releases.
|
||||
|
||||
Introduction
|
||||
=======
|
||||
|
||||
The general problem is to generate a Markov Chain distributed according to the action $$S(\psi)$$ in order to compute observables expectaction values.
|
||||
|
||||
$$ \langle O \rangle = \frac{1}{Z} \int O e^{-S(\psi)} D\psi $$
|
||||
|
||||
The Hybrid Monte Carlo approach is to introduce ficticious random momenta to construct an Hamiltonian $$H(\psi)$$ and generate
|
||||
new configurations by integrating the corresponding Hamilton equations.
|
||||
|
||||
$$H(\psi) = \frac{1}{2} P^2 + S(\psi)$$
|
||||
|
||||
|
||||
Command line options
|
||||
====================
|
||||
|
||||
(relevant file `GenericHMCrunner.h`)
|
||||
List of command line options, specific for HMC
|
||||
|
||||
* ```--StartingType <string>```
|
||||
|
||||
Choices: HotStart, ColdStart, TepidStart, CheckpointStart
|
||||
|
||||
* ```--StartingTrajectory <integer>```
|
||||
|
||||
Only for CheckpointStart, ignored otherwise.
|
||||
Expected format of the filename is ```<config prefix>.<integer>``` for the configuration and ```<rng file prefix>.<integer>```
|
||||
|
||||
* ```--Trajectories <integer>```
|
||||
|
||||
Number of trajectories in this run, excluding the thermalization steps. Default: 1.
|
||||
|
||||
* ```--Thermalizations <integers>```
|
||||
|
||||
Default: 10
|
||||
|
||||
* ```--ParameterFile <string>```
|
||||
|
||||
The filename for the input parameters deserialisation.
|
||||
|
||||
All of them, except the starting trajectory, can be overridden by the input file (but this behaviour can be easily changed by the user writing the source file).
|
||||
|
||||
Actions
|
||||
======
|
||||
|
||||
Action names are defined in the file
|
||||
lib/qcd/Actions.h
|
||||
|
||||
Gauge action names list:
|
||||
|
||||
```
|
||||
WilsonGaugeActionR;
|
||||
WilsonGaugeActionF;
|
||||
WilsonGaugeActionD;
|
||||
PlaqPlusRectangleActionR;
|
||||
PlaqPlusRectangleActionF;
|
||||
PlaqPlusRectangleActionD;
|
||||
IwasakiGaugeActionR;
|
||||
IwasakiGaugeActionF;
|
||||
IwasakiGaugeActionD;
|
||||
SymanzikGaugeActionR;
|
||||
SymanzikGaugeActionF;
|
||||
SymanzikGaugeActionD;
|
||||
|
||||
ConjugateWilsonGaugeActionR;
|
||||
ConjugateWilsonGaugeActionF;
|
||||
ConjugateWilsonGaugeActionD;
|
||||
ConjugatePlaqPlusRectangleActionR;
|
||||
ConjugatePlaqPlusRectangleActionF;
|
||||
ConjugatePlaqPlusRectangleActionD;
|
||||
ConjugateIwasakiGaugeActionR;
|
||||
ConjugateIwasakiGaugeActionF;
|
||||
ConjugateIwasakiGaugeActionD;
|
||||
ConjugateSymanzikGaugeActionR;
|
||||
ConjugateSymanzikGaugeActionF;
|
||||
ConjugateSymanzikGaugeActionD;
|
||||
```
|
||||
|
||||
Scalar action names list
|
||||
|
||||
```
|
||||
ScalarActionR;
|
||||
ScalarActionF;
|
||||
ScalarActionD;
|
||||
```
|
||||
|
||||
each of these action accept one single parameter at creation time (beta).
|
||||
Example for creating a Symanzik action with beta=4.0
|
||||
|
||||
SymanzikGaugeActionR(4.0)
|
||||
|
||||
The suffixes R,F,D in the action names refer to the Real
|
||||
(the precision is defined at compile time by the --enable-precision flag in the configure),
|
||||
Float and Double, that force the precision of the action to be 32, 64 bit respectively.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,139 +0,0 @@
|
||||
---
|
||||
##layout : single
|
||||
title : "Documentation"
|
||||
author_profile: false
|
||||
excerpt: "Welcome to the Grid documentation pages"
|
||||
header:
|
||||
overlay_color: "#5DADE2"
|
||||
#cta_label: "Download documentation"
|
||||
#cta_url: "https://www.google.com"
|
||||
sidebar:
|
||||
nav : docs
|
||||
permalink: /docs/
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
We are currently working on the full documentation.
|
||||
|
||||
{% if site.option=="web" %}
|
||||
Use the sidebar on the left to navigate.
|
||||
{% endif %}
|
||||
|
||||
_May 2017 : The API description and Lattice Theories sections in the sidebar are work in progress_.
|
||||
|
||||
### Version history
|
||||
|
||||
* May 2017 [version 0.7.0](https://github.com/paboyle/Grid/tree/release/v0.7.0)
|
||||
* November 2016 [version 0.6.0](https://github.com/paboyle/Grid/tree/release/v0.6.0)
|
||||
|
||||
|
||||
Grid is primarily an application development interface (API) for structured Cartesian grid codes and written in C++11.
|
||||
In particular it is aimed at Lattice Field Theory simulations in general gauge theories, but with a particular emphasis
|
||||
on supporting SU(3) and U(1) gauge theories relevant to hadronic physics.
|
||||
|
||||
|
||||
### Description
|
||||
|
||||
This library provides data parallel C++ container classes with internal memory layout
|
||||
that is transformed to map efficiently to SIMD architectures. CSHIFT facilities
|
||||
are provided, similar to HPF and cmfortran, and user control is given over the mapping of
|
||||
array indices to both MPI tasks and SIMD processing elements.
|
||||
|
||||
* Identically shaped arrays then be processed with perfect data parallelisation.
|
||||
* Such identically shaped arrays are called conformable arrays.
|
||||
|
||||
The transformation is based on the observation that Cartesian array processing involves
|
||||
identical processing to be performed on different regions of the Cartesian array.
|
||||
|
||||
The library will both geometrically decompose into MPI tasks and across SIMD lanes.
|
||||
Local vector loops are parallelised with OpenMP pragmas.
|
||||
|
||||
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but
|
||||
optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification
|
||||
for most programmers.
|
||||
|
||||
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
|
||||
Presently SSE4 (128 bit) AVX, AVX2, QPX (256 bit), IMCI, and AVX512 (512 bit) targets are supported (ARM NEON on the way).
|
||||
|
||||
These are presented as `vRealF`, `vRealD`, `vComplexF`, and `vComplexD` internal vector data types. These may be useful in themselves for other programmers.
|
||||
The corresponding scalar types are named `RealF`, `RealD`, `ComplexF` and `ComplexD`.
|
||||
|
||||
MPI, OpenMP, and SIMD parallelism are present in the library.
|
||||
Please see [this paper](https://arxiv.org/abs/1512.03487) for more detail.
|
||||
|
||||
|
||||
### Who will use this library
|
||||
|
||||
As an application development interface *Grid* is primarily a programmers tool providing the
|
||||
building blocks and primitives for constructing lattice gauge theory programmes.
|
||||
|
||||
Grid functionality includes:
|
||||
|
||||
* Data parallel primitives, similar to QDP++
|
||||
* gauge and fermion actions
|
||||
* solvers
|
||||
* gauge and fermion force terms
|
||||
* integrators and (R)HMC.
|
||||
* parallel field I/O
|
||||
* object serialisation (text, XML, JSON...)
|
||||
|
||||
Grid is intended to enable the rapid and easy development of code with reasonably competitive performance.
|
||||
|
||||
It is first and foremost a *library* to which people can programme, and develop new algorithms and measurements.
|
||||
As such, it is very much hoped that peoples principle point of contact with Grid will be in
|
||||
the wonderfully rich C++ language. Since import and export procedures are provided for the opaque lattice types
|
||||
it should be possible to call Grid from other code bases.
|
||||
|
||||
Grid is most tightly coupled to the Hadrons package
|
||||
developed principally by Antonin Portelli.
|
||||
This package is entirely composed against the Grid data parallel interface.
|
||||
|
||||
Interfacing to other packages is also possible.
|
||||
|
||||
Several regression tests that combine Grid with Chroma are included in the Grid distribution.
|
||||
Further, Grid has been successfully interfaced to
|
||||
|
||||
* The Columbia Physics System
|
||||
* The MILC code
|
||||
|
||||
### Data parallel interface
|
||||
|
||||
Most users will wish to interact with Grid above the data parallel *Lattice* interface. At this level
|
||||
a programme is simply written as a series of statements, addressing entire lattice objects.
|
||||
|
||||
|
||||
Implementation details may be provided to explain how the code works, but are not strictly part of the API.
|
||||
|
||||
**Example**
|
||||
|
||||
For example, as an implementation detail, in a single programme multiple data (SPMD) message passing supercomputer the main programme is trivially replicated on each computing node. The data parallel operations are called *collectively* by all nodes. Any scalar values returned by the various reduction routines are the same on each node, resulting in (for example) the same decision being made by all nodes to terminate an iterative solver on the same iteration.
|
||||
|
||||
|
||||
|
||||
### Internal development
|
||||
|
||||
Internal developers may contribute to Grid at a level below the data parallel interface.
|
||||
|
||||
Specifically, development of new lattice Dirac operators, for example,
|
||||
or any codes directly interacting with the
|
||||
|
||||
* Communicators
|
||||
|
||||
* Simd
|
||||
|
||||
* Tensor
|
||||
|
||||
* Stencil
|
||||
|
||||
will make use of facilities provided by to assist the creation of high performance code. The internal data layout complexities
|
||||
will be exposed to some degree and the interfaces are subject to change without notice as HPC architectures change.
|
||||
|
||||
Since some of the internal implementation details are needed to explain the design strategy of grid these will be
|
||||
documented, but labelled as *implementation dependent*
|
||||
|
||||
Reasonable endeavours will be made to preserve functionality where practical but no guarantees are made.
|
||||
|
||||
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,361 +0,0 @@
|
||||
---
|
||||
layout: splash
|
||||
title : "GRID license"
|
||||
author_profile: false
|
||||
excerpt: "Grid is licensed under GPL 2.0"
|
||||
permalink: /license/
|
||||
header:
|
||||
overlay_color: "#333"
|
||||
cta_label: "GPL licenses FAQs"
|
||||
cta_url: "https://www.gnu.org/licenses/gpl-faq.html"
|
||||
---
|
||||
|
||||
{% include base_path %}
|
||||
|
||||
GNU General Public License
|
||||
==========================
|
||||
|
||||
_Version 2, June 1991_
|
||||
_Copyright © 1989, 1991 Free Software Foundation, Inc.,_
|
||||
_51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA_
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
### Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: **(1)** copyright the software, and
|
||||
**(2)** offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
### TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
**0.** This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The “Program”, below,
|
||||
refers to any such program or work, and a “work based on the Program”
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term “modification”.) Each licensee is addressed as “you”.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
**1.** You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
**2.** You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
* **a)** You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
* **b)** You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
* **c)** If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
**3.** You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
* **a)** Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
* **b)** Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
* **c)** Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
**4.** You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
**5.** You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
**6.** Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
**7.** If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
**8.** If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
**9.** The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and “any
|
||||
later version”, you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
**10.** If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
### NO WARRANTY
|
||||
|
||||
**11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
**12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
### How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the “copyright” line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w` and `show c` should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w` and `show c`; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a “copyright disclaimer” for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% for post in paginator.posts %}
|
||||
{% include archive-single.html %}
|
||||
{% endfor %}
|
||||
|
||||
{% include paginator.html %}
|
||||
@@ -1,21 +0,0 @@
|
||||
/* ==========================================================================
|
||||
ANIMATIONS
|
||||
========================================================================== */
|
||||
|
||||
@-webkit-keyframes intro {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes intro {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,238 +0,0 @@
|
||||
/* ==========================================================================
|
||||
ARCHIVE
|
||||
========================================================================== */
|
||||
|
||||
.archive {
|
||||
margin-bottom: 2em;
|
||||
|
||||
@include breakpoint($medium) {
|
||||
@include span(12 of 12);
|
||||
}
|
||||
|
||||
@include breakpoint($large) {
|
||||
@include span(10 of 12 last);
|
||||
@include prefix(0.5 of 12);
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.archive__subtitle {
|
||||
margin: 1.414em 0 0;
|
||||
padding-bottom: 0.5em;
|
||||
font-size: $type-size-5;
|
||||
color: mix(#fff, $gray, 25%);
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
+ .list__item .archive__item-title {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.archive__item-title {
|
||||
margin-bottom: 0.25em;
|
||||
font-family: $sans-serif-narrow;
|
||||
|
||||
a + a {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
/* remove border*/
|
||||
.page__content {
|
||||
|
||||
.archive__item-title {
|
||||
margin-top: 1em;
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.archive__item-excerpt {
|
||||
margin-top: 0;
|
||||
font-size: $type-size-6;
|
||||
|
||||
& + p {
|
||||
text-indent: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.archive__item-teaser {
|
||||
border-radius: $border-radius;
|
||||
overflow: hidden;
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.archive__item:hover {
|
||||
.archive__item-teaser {
|
||||
box-shadow: 0 0 10px rgba(#000, 0.25);
|
||||
}
|
||||
|
||||
.archive__item-title {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
List view
|
||||
========================================================================== */
|
||||
|
||||
.list__item {
|
||||
@include breakpoint($medium) {
|
||||
padding-right: $right-sidebar-width-narrow;
|
||||
}
|
||||
|
||||
@include breakpoint($large) {
|
||||
padding-right: $right-sidebar-width;
|
||||
}
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
padding-right: $right-sidebar-width-wide;
|
||||
}
|
||||
|
||||
.page__meta {
|
||||
margin: 0 0 4px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Grid view
|
||||
========================================================================== */
|
||||
|
||||
.grid__item {
|
||||
margin-bottom: 2em;
|
||||
|
||||
.page__meta {
|
||||
margin: 0 0 4px;
|
||||
}
|
||||
|
||||
.archive__item-title {
|
||||
margin-top: 0.5em;
|
||||
font-size: $type-size-5;
|
||||
}
|
||||
|
||||
.archive__item-excerpt {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include breakpoint($small) {
|
||||
@include gallery(5 of 10);
|
||||
.archive__item-teaser {
|
||||
max-height: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint($medium) {
|
||||
margin-left: 0; /* reset before mixin does its thing*/
|
||||
margin-right: 0; /* reset before mixin does its thing*/
|
||||
@include gallery(2.5 of 10);
|
||||
|
||||
.archive__item-teaser {
|
||||
max-height: 120px;
|
||||
}
|
||||
|
||||
.archive__item-excerpt {
|
||||
display: block;
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Features
|
||||
========================================================================== */
|
||||
|
||||
.feature__wrapper {
|
||||
@include clearfix();
|
||||
margin-bottom: 2em;
|
||||
border-bottom: 1px solid $border-color;
|
||||
}
|
||||
|
||||
.feature__item {
|
||||
margin-bottom: 2em;
|
||||
font-size: 1.25rem;
|
||||
|
||||
@include breakpoint($small) {
|
||||
margin-bottom: 0;
|
||||
@include gallery(4 of 12);
|
||||
|
||||
.feature__item-teaser {
|
||||
max-height: 200px;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
&--left {
|
||||
@include full();
|
||||
font-size: 1.25rem;
|
||||
|
||||
.archive__item-teaser {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
@include breakpoint($small) {
|
||||
.archive__item-teaser {
|
||||
@include span(5 of 12);
|
||||
}
|
||||
|
||||
.archive__item-body {
|
||||
@include span(7 of 12 last);
|
||||
@include prefix(0.5 of 12);
|
||||
@include suffix(1 of 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--right {
|
||||
@include full();
|
||||
font-size: 1.25rem;
|
||||
|
||||
.archive__item-teaser {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
@include breakpoint($small) {
|
||||
text-align: right;
|
||||
|
||||
.archive__item-teaser {
|
||||
@include span(5 of 12 rtl);
|
||||
}
|
||||
|
||||
.archive__item-body {
|
||||
@include span(7 of 12 last rtl);
|
||||
@include prefix(0.5 of 12);
|
||||
@include suffix(1 of 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--center {
|
||||
@include full();
|
||||
font-size: 1.25rem;
|
||||
|
||||
.archive__item-teaser {
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
@include breakpoint($small) {
|
||||
text-align: center;
|
||||
|
||||
.archive__item-teaser {
|
||||
margin: 0 auto;
|
||||
width: span(5 of 12);
|
||||
}
|
||||
|
||||
.archive__item-body {
|
||||
margin: 0 auto;
|
||||
width: span(7 of 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,315 +0,0 @@
|
||||
/* ==========================================================================
|
||||
BASE ELEMENTS
|
||||
========================================================================== */
|
||||
|
||||
html {
|
||||
/* sticky footer fix */
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: $text-color;
|
||||
font-family: $global-font-family;
|
||||
line-height: 1.5;
|
||||
|
||||
&.overflow--hidden {
|
||||
/* when primary navigation is visible, the content in the background won't scroll */
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin: 2em 0 0.5em;
|
||||
line-height: 1.2;
|
||||
font-family: $header-font-family;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
font-size: $type-size-3;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: $type-size-4;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: $type-size-5;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
small, .small {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1.3em;
|
||||
}
|
||||
|
||||
u,
|
||||
ins {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid $text-color;
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
del a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* reduce orphans and widows when printing */
|
||||
|
||||
p, pre, blockquote, ul, ol, dl, figure, table, fieldset {
|
||||
orphans: 3;
|
||||
widows: 3;
|
||||
}
|
||||
|
||||
/* abbreviations */
|
||||
|
||||
abbr[title],
|
||||
abbr[data-original-title] {
|
||||
text-decoration: none;
|
||||
cursor: help;
|
||||
border-bottom: 1px dotted $text-color;
|
||||
}
|
||||
|
||||
/* blockquotes */
|
||||
|
||||
blockquote {
|
||||
margin: 2em 1em 2em 0;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
font-style: italic;
|
||||
border-left: 0.25em solid $primary-color;
|
||||
|
||||
cite {
|
||||
font-style: italic;
|
||||
|
||||
&:before {
|
||||
content: "\2014";
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* links */
|
||||
|
||||
a {
|
||||
&:focus {
|
||||
@extend %tab-focus;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* code */
|
||||
|
||||
tt, code, kbd, samp, pre {
|
||||
font-family: $monospace;
|
||||
}
|
||||
|
||||
pre {
|
||||
overflow-x: auto; /* add scrollbars to wide code blocks*/
|
||||
}
|
||||
|
||||
p > code,
|
||||
a > code,
|
||||
li > code,
|
||||
figcaption > code,
|
||||
td > code {
|
||||
padding-top: 0.1rem;
|
||||
padding-bottom: 0.1rem;
|
||||
font-size: $type-size-6;
|
||||
background: $code-background-color;
|
||||
border: 1px solid $lighter-gray;
|
||||
border-radius: $border-radius;
|
||||
box-shadow: $box-shadow;
|
||||
|
||||
&:before, &:after {
|
||||
letter-spacing: -0.2em;
|
||||
content: "\00a0"; /* non-breaking space*/
|
||||
}
|
||||
}
|
||||
|
||||
/* horizontal rule */
|
||||
|
||||
hr {
|
||||
display: block;
|
||||
margin: 1em 0;
|
||||
border: 0;
|
||||
border-top: 1px solid $border-color;
|
||||
}
|
||||
|
||||
/* lists */
|
||||
|
||||
ul li,
|
||||
ol li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
li ul,
|
||||
li ol {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
/*
|
||||
Media and embeds
|
||||
========================================================================== */
|
||||
|
||||
/* Figures and images */
|
||||
|
||||
figure {
|
||||
display: -webkit-box;
|
||||
display: flex;
|
||||
-webkit-box-pack: justify;
|
||||
justify-content: space-between;
|
||||
-webkit-box-align: start;
|
||||
align-items: flex-start;
|
||||
flex-wrap: wrap;
|
||||
margin: 2em 0;
|
||||
|
||||
img,
|
||||
iframe,
|
||||
.fluid-width-video-wrapper {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
border-radius: $border-radius;
|
||||
-webkit-transition: $global-transition;
|
||||
transition: $global-transition;
|
||||
}
|
||||
|
||||
> a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&.half {
|
||||
> a,
|
||||
> img {
|
||||
@include breakpoint($small) {
|
||||
width: calc(50% - 0.5em);
|
||||
}
|
||||
}
|
||||
|
||||
figcaption {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&.third {
|
||||
> a,
|
||||
> img {
|
||||
@include breakpoint($small) {
|
||||
width: calc(33.3333% - 0.5em);
|
||||
}
|
||||
}
|
||||
|
||||
figcaption {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Figure captions */
|
||||
|
||||
figcaption {
|
||||
margin-bottom: 0.5em;
|
||||
color: mix(#fff, $text-color, 25%);
|
||||
font-family: $caption-font-family;
|
||||
font-size: $type-size-6;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid $light-gray;
|
||||
-webkit-transition: $global-transition;
|
||||
transition: $global-transition;
|
||||
|
||||
&:hover {
|
||||
color: #000;
|
||||
border-bottom-color: #000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Fix IE9 SVG bug */
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Navigation lists
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Removes margins, padding, and bullet points from navigation lists
|
||||
*
|
||||
* Example usage:
|
||||
* <nav>
|
||||
* <ul>
|
||||
* <li><a href="#link-1">Link 1</a></li>
|
||||
* <li><a href="#link-2">Link 2</a></li>
|
||||
* <li><a href="#link-3">Link 3</a></li>
|
||||
* </ul>
|
||||
* </nav>
|
||||
*/
|
||||
|
||||
nav {
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* override white-space for nested lists */
|
||||
ul li,
|
||||
ol li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
li ul,
|
||||
li ol {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Global animation transition
|
||||
========================================================================== */
|
||||
|
||||
b, i, strong, em, blockquote, p, q, span, figure, img, h1, h2, header, input, a, tr, td, form button, input[type="submit"], .btn, .highlight, .archive__item-teaser {
|
||||
-webkit-transition: $global-transition;
|
||||
transition: $global-transition;
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
/* ==========================================================================
|
||||
BUTTONS
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
Default button
|
||||
========================================================================== */
|
||||
|
||||
.btn {
|
||||
/* default button */
|
||||
display: inline-block;
|
||||
margin-bottom: 0.25em;
|
||||
padding: 0.5em 1em;
|
||||
color: #fff !important;
|
||||
font-family: $sans-serif;
|
||||
font-size: $type-size-6;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
background-color: $primary-color;
|
||||
border: 0 !important;
|
||||
border-radius: $border-radius;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(white, #000, 20%);
|
||||
}
|
||||
|
||||
.icon {
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
|
||||
.icon + .hidden {
|
||||
margin-left: -0.5em; /* override for hidden text*/
|
||||
}
|
||||
|
||||
/* fills width of parent container */
|
||||
|
||||
&--block {
|
||||
display: block;
|
||||
width: 100%;
|
||||
|
||||
+ .btn--block {
|
||||
margin-top: 0.25em;
|
||||
}
|
||||
}
|
||||
|
||||
/* for dark backgrounds */
|
||||
|
||||
&--inverse {
|
||||
color: $gray !important;
|
||||
border: 1px solid $light-gray !important; /* override*/
|
||||
background-color: #fff;
|
||||
|
||||
&:hover {
|
||||
color: #fff !important;
|
||||
border-color: $gray;
|
||||
}
|
||||
}
|
||||
|
||||
/* light outline */
|
||||
|
||||
&--light-outline {
|
||||
border: 1px solid #fff !important; /* override*/
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* information */
|
||||
|
||||
&--info {
|
||||
background-color: $info-color;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(#000, $info-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
/* warning */
|
||||
|
||||
&--warning {
|
||||
background-color: $warning-color;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(#000, $warning-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
/* success */
|
||||
|
||||
&--success {
|
||||
background-color: $success-color;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(#000, $success-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
/* danger */
|
||||
|
||||
&--danger {
|
||||
background-color: $danger-color;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(#000, $danger-color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
/* disabled */
|
||||
|
||||
&--disabled {
|
||||
pointer-events: none;
|
||||
cursor: not-allowed;
|
||||
filter: alpha(opacity=65);
|
||||
box-shadow: none;
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
/* social buttons */
|
||||
|
||||
$social:
|
||||
(facebook, $facebook-color),
|
||||
(twitter, $twitter-color),
|
||||
(google-plus, $google-plus-color),
|
||||
(linkedin, $linkedin-color);
|
||||
|
||||
@each $socialnetwork, $color in $social {
|
||||
&--#{$socialnetwork} {
|
||||
background-color: $color;
|
||||
|
||||
&:hover {
|
||||
background-color: mix(#000, $color, 20%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* extra large button */
|
||||
|
||||
&--x-large {
|
||||
font-size: $type-size-4;
|
||||
}
|
||||
|
||||
/* large button */
|
||||
|
||||
&--large {
|
||||
font-size: $type-size-5;
|
||||
}
|
||||
|
||||
/* small button */
|
||||
|
||||
&--small {
|
||||
font-size: $type-size-7;
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/* ==========================================================================
|
||||
FOOTER
|
||||
========================================================================== */
|
||||
|
||||
.page__footer {
|
||||
@include full();
|
||||
@include clearfix;
|
||||
/* sticky footer fix start */
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
clear: both;
|
||||
height: auto;
|
||||
/* sticky footer fix end */
|
||||
margin-top: 3em;
|
||||
color: mix(#fff, $gray, 25%);
|
||||
-webkit-animation: intro 0.3s both;
|
||||
animation: intro 0.3s both;
|
||||
-webkit-animation-delay: 0.45s;
|
||||
animation-delay: 0.45s;
|
||||
background-color: $lighter-gray;
|
||||
border-top: 1px solid $light-gray;
|
||||
|
||||
footer {
|
||||
@include container;
|
||||
@include clearfix;
|
||||
margin-top: 2em;
|
||||
padding: 0 1em 2em;
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
max-width: $x-large;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.fa {
|
||||
color: mix(#fff, $gray, 25%);
|
||||
}
|
||||
}
|
||||
|
||||
.page__footer-copyright {
|
||||
font-family: $global-font-family;
|
||||
font-size: $type-size-7;
|
||||
}
|
||||
|
||||
.page__footer-follow {
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
font-family: $sans-serif-narrow;
|
||||
font-size: $type-size-6;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
li + li:before {
|
||||
content: "";
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
a {
|
||||
padding-right: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
@@ -1,391 +0,0 @@
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
form {
|
||||
margin: 0 0 5px 0;
|
||||
|
||||
fieldset {
|
||||
margin-bottom: 5px;
|
||||
padding: 0;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin-bottom: 5px * 2;
|
||||
*margin-left: -7px;
|
||||
padding: 0;
|
||||
color: $text-color;
|
||||
border: 0;
|
||||
border-bottom: 1px solid mix(#fff, #000, 80%);
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 5px / 2;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0 0 5px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
br {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
label,
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
vertical-align: baseline;
|
||||
*vertical-align: middle;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
box-sizing: border-box;
|
||||
font-family: $sans-serif;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
margin-bottom: 0.25em;
|
||||
color: $text-color;
|
||||
cursor: pointer;
|
||||
|
||||
small {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea,
|
||||
select {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
input,
|
||||
textarea,
|
||||
select {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
padding: 0.25em;
|
||||
margin-bottom: 0.5em;
|
||||
color: $text-color;
|
||||
background-color: #fff;
|
||||
border: 1px solid mix(#fff, #000, 80%);
|
||||
border-radius: $border-radius;
|
||||
box-shadow: $box-shadow;
|
||||
|
||||
&:hover {
|
||||
border-color: mix(#fff, $primary-color, 50%);
|
||||
}
|
||||
}
|
||||
|
||||
.input-mini {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.input-small {
|
||||
width: 90px;
|
||||
}
|
||||
|
||||
input[type="image"],
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
width: auto;
|
||||
height: auto;
|
||||
padding: 0;
|
||||
margin: 3px 0;
|
||||
*margin-top: 0;
|
||||
line-height: normal;
|
||||
cursor: pointer;
|
||||
border-radius: 0;
|
||||
border: 0 \9;
|
||||
}
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
*width: 13px;
|
||||
*height: 13px;
|
||||
}
|
||||
|
||||
input[type="image"] {
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
width: auto;
|
||||
padding: initial;
|
||||
line-height: initial;
|
||||
border: initial;
|
||||
background-color: transparent;
|
||||
background-color: initial;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
width: auto;
|
||||
height: auto;
|
||||
cursor: pointer;
|
||||
*overflow: visible;
|
||||
}
|
||||
|
||||
select,
|
||||
input[type="file"] {
|
||||
*margin-top: 4px;
|
||||
}
|
||||
|
||||
select {
|
||||
width: auto;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
select[multiple],
|
||||
select[size] {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
input[type="hidden"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.form {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.radio,
|
||||
.checkbox {
|
||||
padding-left: 18px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.radio input[type="radio"],
|
||||
.checkbox input[type="checkbox"] {
|
||||
float: left;
|
||||
margin-left: -18px;
|
||||
}
|
||||
|
||||
.radio.inline,
|
||||
.checkbox.inline {
|
||||
display: inline-block;
|
||||
padding-top: 5px;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.radio.inline + .radio.inline,
|
||||
.checkbox.inline + .checkbox.inline {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Disabled state
|
||||
========================================================================== */
|
||||
|
||||
input[disabled],
|
||||
select[disabled],
|
||||
textarea[disabled],
|
||||
input[readonly],
|
||||
select[readonly],
|
||||
textarea[readonly] {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Focus & active state
|
||||
========================================================================== */
|
||||
|
||||
input:focus,
|
||||
textarea:focus {
|
||||
border-color: $primary-color;
|
||||
outline: 0;
|
||||
outline: thin dotted \9;
|
||||
}
|
||||
|
||||
input[type="file"]:focus,
|
||||
input[type="radio"]:focus,
|
||||
input[type="checkbox"]:focus,
|
||||
select:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Help text
|
||||
========================================================================== */
|
||||
|
||||
.help-block,
|
||||
.help-inline {
|
||||
color: $info-color;
|
||||
}
|
||||
|
||||
.help-block {
|
||||
display: block;
|
||||
margin-bottom: 1em;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
.help-inline {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
.form-inline
|
||||
========================================================================== */
|
||||
|
||||
.form-inline input,
|
||||
.form-inline textarea,
|
||||
.form-inline select {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.form-inline label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.form-inline .radio,
|
||||
.form-inline .checkbox,
|
||||
.form-inline .radio {
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.form-inline .radio input[type="radio"],
|
||||
.form-inline .checkbox input[type="checkbox"] {
|
||||
float: left;
|
||||
margin-left: 0;
|
||||
margin-right: 3px; }
|
||||
|
||||
|
||||
/*
|
||||
.form-search
|
||||
========================================================================== */
|
||||
|
||||
.form-search input,
|
||||
.form-search textarea,
|
||||
.form-search select {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.form-search .search-query {
|
||||
padding-left: 14px;
|
||||
padding-right: 14px;
|
||||
margin-bottom: 0;
|
||||
border-radius: 14px;
|
||||
}
|
||||
|
||||
.form-search label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.form-search .radio,
|
||||
.form-search .checkbox,
|
||||
.form-inline .radio {
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.form-search .radio input[type="radio"],
|
||||
.form-search .checkbox input[type="checkbox"] {
|
||||
float: left;
|
||||
margin-left: 0;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
.form--loading
|
||||
========================================================================== */
|
||||
|
||||
.form--loading:before {
|
||||
content: '';
|
||||
}
|
||||
|
||||
.form--loading .form__spinner {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.form:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.form__spinner {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
z-index: 11;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Google search form
|
||||
========================================================================== */
|
||||
|
||||
#goog-fixurl {
|
||||
ul {
|
||||
list-style: none;
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#goog-wm-qt {
|
||||
width: auto;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 20px;
|
||||
padding: 8px 20px;
|
||||
display: inline-block;
|
||||
font-size: $type-size-6;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
border-width: 2px !important;
|
||||
border-style: solid !important;
|
||||
border-color: lighten(#000,50);
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
|
||||
#goog-wm-sb {
|
||||
@extend .btn;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/* ==========================================================================
|
||||
MASTHEAD
|
||||
========================================================================== */
|
||||
|
||||
.masthead {
|
||||
position: relative;
|
||||
border-bottom: 1px solid $border-color;
|
||||
-webkit-animation: intro 0.3s both;
|
||||
animation: intro 0.3s both;
|
||||
-webkit-animation-delay: 0.15s;
|
||||
animation-delay: 0.15s;
|
||||
z-index: 20;
|
||||
|
||||
&__inner-wrap {
|
||||
@include container;
|
||||
@include clearfix;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
font-family: $sans-serif-narrow;
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
max-width: $x-large;
|
||||
}
|
||||
|
||||
nav {
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.masthead__menu {
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
clear: both;
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
|
||||
.masthead__menu-item {
|
||||
display: block;
|
||||
list-style-type: none;
|
||||
white-space: nowrap;
|
||||
|
||||
&--lg {
|
||||
padding-right: 2em;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
/* ==========================================================================
|
||||
MIXINS
|
||||
========================================================================== */
|
||||
|
||||
%tab-focus {
|
||||
/* Default*/
|
||||
outline: thin dotted $warning-color;
|
||||
/* Webkit*/
|
||||
outline: 5px auto $warning-color;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
/*
|
||||
em function
|
||||
========================================================================== */
|
||||
|
||||
@function em($target, $context: $doc-font-size) {
|
||||
@return ($target / $context) * 1em;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Bourbon clearfix
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
* Provides an easy way to include a clearfix for containing floats.
|
||||
* link http://cssmojo.com/latest_new_clearfix_so_far/
|
||||
*
|
||||
* example scss - Usage
|
||||
*
|
||||
* .element {
|
||||
* @include clearfix;
|
||||
* }
|
||||
*
|
||||
* example css - CSS Output
|
||||
*
|
||||
* .element::after {
|
||||
* clear: both;
|
||||
* content: "";
|
||||
* display: table;
|
||||
* }
|
||||
*/
|
||||
|
||||
@mixin clearfix {
|
||||
clear: both;
|
||||
|
||||
&::after {
|
||||
clear: both;
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
}
|
||||
@@ -1,442 +0,0 @@
|
||||
/* ==========================================================================
|
||||
NAVIGATION
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
Breadcrumb navigation links
|
||||
========================================================================== */
|
||||
|
||||
.breadcrumbs {
|
||||
@include container;
|
||||
@include clearfix;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 2em;
|
||||
padding-right: 2em;
|
||||
font-family: $sans-serif;
|
||||
-webkit-animation: intro 0.3s both;
|
||||
animation: intro 0.3s both;
|
||||
-webkit-animation-delay: 0.30s;
|
||||
animation-delay: 0.30s;
|
||||
|
||||
@include breakpoint($large) {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
max-width: $x-large;
|
||||
}
|
||||
|
||||
ol {
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: $type-size-6;
|
||||
|
||||
@include breakpoint($large) {
|
||||
@include span(10 of 12 last);
|
||||
}
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
@include prefix(0.5 of 12);
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.current {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Post pagination navigation links
|
||||
========================================================================== */
|
||||
|
||||
.pagination {
|
||||
@include full();
|
||||
@include clearfix();
|
||||
margin-top: 1em;
|
||||
padding-top: 1em;
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
font-family: $sans-serif;
|
||||
}
|
||||
|
||||
li {
|
||||
display: block;
|
||||
float: left;
|
||||
margin-left: -1px;
|
||||
|
||||
a {
|
||||
margin-bottom: 0.25em;
|
||||
padding: 0.5em 1em;
|
||||
font-family: $sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: mix(#fff, $gray, 25%);
|
||||
border: 1px solid $light-gray;
|
||||
border-radius: 0;
|
||||
|
||||
&:hover {
|
||||
color: $link-color-hover;
|
||||
}
|
||||
|
||||
&.current {
|
||||
color: #fff;
|
||||
background: $primary-color;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: mix(#fff, $gray, 75%);
|
||||
pointer-events: none;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
|
||||
a {
|
||||
border-top-left-radius: $border-radius;
|
||||
border-bottom-left-radius: $border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
a {
|
||||
border-top-right-radius: $border-radius;
|
||||
border-bottom-right-radius: $border-radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* next/previous buttons */
|
||||
&--pager {
|
||||
display: block;
|
||||
padding: 1em 2em;
|
||||
float: left;
|
||||
width: 50%;
|
||||
font-family: $sans-serif;
|
||||
font-size: $type-size-5;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: mix(#fff, $gray, 50%);
|
||||
border: 1px solid $light-gray;
|
||||
border-radius: $border-radius;
|
||||
|
||||
&:hover {
|
||||
color: $link-color-hover;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
margin-left: -1px;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
color: mix(#fff, $gray, 75%);
|
||||
pointer-events: none;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page__content + .pagination,
|
||||
.page__meta + .pagination,
|
||||
.page__share + .pagination,
|
||||
.page__comments + .pagination {
|
||||
margin-top: 2em;
|
||||
padding-top: 2em;
|
||||
border-top: 1px solid $border-color;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Priority plus navigation
|
||||
========================================================================== */
|
||||
|
||||
.greedy-nav {
|
||||
position: relative;
|
||||
min-width: 250px;
|
||||
background: $background-color;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
margin: 0 1rem;
|
||||
padding: 0.5rem 0;
|
||||
color: $masthead-link-color;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
color: $masthead-link-color-hover;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
right: 0;
|
||||
padding: 0 0.5rem;
|
||||
border: 0;
|
||||
outline: none;
|
||||
background-color: $primary-color;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.visible-links {
|
||||
display: table;
|
||||
|
||||
li {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
|
||||
&:first-child {
|
||||
font-weight: bold;
|
||||
|
||||
a {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
a {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
height: 4px;
|
||||
background: mix(#fff, $primary-color, 50%);
|
||||
width: 100%;
|
||||
-webkit-transition: $global-transition;
|
||||
transition: $global-transition;
|
||||
-webkit-transform: scaleX(0);
|
||||
-ms-transform: scaleX(0);
|
||||
transform: scaleX(0); /* hide*/
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
-webkit-transform: scaleX(1);
|
||||
-ms-transform: scaleX(1);
|
||||
transform: scaleX(1); /* reveal*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hidden-links {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
right: 0;
|
||||
margin-top: 15px;
|
||||
padding: 5px;
|
||||
border: 1px solid $border-color;
|
||||
border-radius: $border-radius;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 10px rgba(#000, 0.25);
|
||||
|
||||
a {
|
||||
margin: 0;
|
||||
padding: 10px 20px;
|
||||
font-size: $type-size-5;
|
||||
|
||||
&:hover {
|
||||
color: $masthead-link-color-hover;
|
||||
background: mix(#fff, $primary-color, 75%);
|
||||
}
|
||||
}
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -11px;
|
||||
right: 10px;
|
||||
width: 0;
|
||||
border-style: solid;
|
||||
border-width: 0 10px 10px;
|
||||
border-color: $border-color transparent;
|
||||
display: block;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: 10px;
|
||||
width: 0;
|
||||
border-style: solid;
|
||||
border-width: 0 10px 10px;
|
||||
border-color: #fff transparent;
|
||||
display: block;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
li {
|
||||
display: block;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Navigation list
|
||||
========================================================================== */
|
||||
|
||||
.nav__list {
|
||||
font-size: 1.25rem;
|
||||
|
||||
ul {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
display: block;
|
||||
padding: 0.125em 0;
|
||||
color: inherit;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
margin-left: -0.5em;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
background: $primary-color;
|
||||
border-radius: $border-radius;
|
||||
|
||||
&:hover {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.nav__noclick {
|
||||
pointer-events: none;
|
||||
color: #ccc;
|
||||
}
|
||||
}
|
||||
|
||||
.nav__title {
|
||||
margin: 0;
|
||||
padding: 0.5rem 1rem;
|
||||
font-family: $sans-serif-narrow;
|
||||
font-size: $type-size-5;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav__sub-title {
|
||||
display: block;
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.5rem 0;
|
||||
font-family: $sans-serif-narrow;
|
||||
font-size: $type-size-6;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
border-bottom: 1px solid $border-color;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Table of contents navigation
|
||||
========================================================================== */
|
||||
|
||||
.toc {
|
||||
font-family: $sans-serif-narrow;
|
||||
color: $gray;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
background-color: #fff;
|
||||
border: 1px solid $border-color;
|
||||
border-radius: $border-radius;
|
||||
box-shadow: $box-shadow;
|
||||
|
||||
.nav__title {
|
||||
color: #fff;
|
||||
font-size: $type-size-6;
|
||||
background: $primary-color;
|
||||
border-top-left-radius: $border-radius;
|
||||
border-top-right-radius: $border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
.toc__menu {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
list-style: none;
|
||||
font-size: 0.8rem;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
padding: 0.5rem 1rem;
|
||||
color: $gray;
|
||||
font-size: $type-size-7;
|
||||
font-weight: bold;
|
||||
line-height: 1.5;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
&:hover {
|
||||
color: #000;
|
||||
background: $lighter-gray;
|
||||
}
|
||||
}
|
||||
|
||||
> li:last-child {
|
||||
a {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
li ul > li a {
|
||||
padding-left: 2rem;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
/* hide sub sub links on small screens*/
|
||||
li > ul li {
|
||||
display: none;
|
||||
|
||||
@include breakpoint($medium) {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
/* ==========================================================================
|
||||
NOTICE TEXT BLOCKS
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Default Kramdown usage (no indents!):
|
||||
* <div class="notice" markdown="1">
|
||||
* #### Headline for the Notice
|
||||
* Text for the notice
|
||||
* </div>
|
||||
*/
|
||||
|
||||
@mixin notice($notice-color) {
|
||||
margin: 2em 0 !important; /* override*/
|
||||
padding: 1em;
|
||||
font-family: $global-font-family;
|
||||
font-size: $type-size-6 !important;
|
||||
text-indent: initial; /* override*/
|
||||
background-color: mix(#fff, $notice-color, 90%);
|
||||
border-radius: $border-radius;
|
||||
box-shadow: 0 1px 1px rgba($notice-color, 0.25);
|
||||
|
||||
h4 {
|
||||
margin-top: 0 !important; /* override*/
|
||||
margin-bottom: 0.75em;
|
||||
}
|
||||
|
||||
@at-root .page__content #{&} h4 {
|
||||
/* using at-root to override .page-content h4 font size*/
|
||||
margin-bottom: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
p {
|
||||
&:last-child {
|
||||
margin-bottom: 0 !important; /* override*/
|
||||
}
|
||||
}
|
||||
|
||||
h4 + p {
|
||||
/* remove space above paragraphs that appear directly after notice headline*/
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $notice-color;
|
||||
|
||||
&:hover {
|
||||
color: mix(#000, $notice-color, 40%);
|
||||
}
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: mix(#fff, $notice-color, 95%)
|
||||
}
|
||||
|
||||
ul {
|
||||
&:last-child {
|
||||
margin-bottom: 0; /* override*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Default notice */
|
||||
|
||||
.notice {
|
||||
@include notice($light-gray);
|
||||
}
|
||||
|
||||
/* Primary notice */
|
||||
|
||||
.notice--primary {
|
||||
@include notice($primary-color);
|
||||
}
|
||||
|
||||
/* Info notice */
|
||||
|
||||
.notice--info {
|
||||
@include notice($info-color);
|
||||
}
|
||||
|
||||
/* Warning notice */
|
||||
|
||||
.notice--warning {
|
||||
@include notice($warning-color);
|
||||
}
|
||||
|
||||
/* Success notice */
|
||||
|
||||
.notice--success {
|
||||
@include notice($success-color);
|
||||
}
|
||||
|
||||
/* Danger notice */
|
||||
|
||||
.notice--danger {
|
||||
@include notice($danger-color);
|
||||
}
|
||||
@@ -1,401 +0,0 @@
|
||||
/* ==========================================================================
|
||||
SINGLE PAGE/POST
|
||||
========================================================================== */
|
||||
|
||||
#main {
|
||||
@include container;
|
||||
@include clearfix;
|
||||
margin-top: 2em;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
animation: intro 0.3s both;
|
||||
animation-delay: 0.35s;
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
max-width: $x-large;
|
||||
}
|
||||
}
|
||||
|
||||
.page {
|
||||
@include breakpoint($large) {
|
||||
@include span(10 of 12 last);
|
||||
@include prefix(0.5 of 12);
|
||||
@include suffix(2 of 12);
|
||||
}
|
||||
|
||||
.page__inner-wrap {
|
||||
@include full();
|
||||
|
||||
.page__content,
|
||||
.page__meta,
|
||||
.page__share {
|
||||
@include full();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page__title {
|
||||
margin-top: 0;
|
||||
line-height: 1;
|
||||
|
||||
& + .page__meta {
|
||||
margin-top: -0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.page__lead {
|
||||
font-family: $global-font-family;
|
||||
font-size: $type-size-4;
|
||||
}
|
||||
|
||||
.page__content {
|
||||
|
||||
h2 {
|
||||
padding-bottom: 0.5em;
|
||||
border-bottom: 1px solid $border-color;
|
||||
}
|
||||
|
||||
p, li, dl {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
/* paragraph indents */
|
||||
p {
|
||||
margin: 0 0 $indent-var;
|
||||
|
||||
/* sibling indentation*/
|
||||
@if $paragraph-indent == true {
|
||||
& + p {
|
||||
text-indent: $indent-var;
|
||||
margin-top: -($indent-var);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
|
||||
img {
|
||||
box-shadow: 0 0 10px rgba(#000, 0.25);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dt {
|
||||
margin-top: 1em;
|
||||
font-family: $sans-serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 1em;
|
||||
font-family: $sans-serif;
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: $type-size-6;
|
||||
}
|
||||
|
||||
/* blockquote citations */
|
||||
blockquote + .small {
|
||||
margin-top: -1.5em;
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.page__hero {
|
||||
position: relative;
|
||||
margin-bottom: 2em;
|
||||
@include clearfix;
|
||||
animation: intro 0.3s both;
|
||||
animation-delay: 0.25s;
|
||||
|
||||
&--overlay {
|
||||
position: relative;
|
||||
margin-bottom: 2em;
|
||||
padding: 2em 0;
|
||||
@include clearfix;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
animation: intro 0.3s both;
|
||||
animation-delay: 0.25s;
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
max-width: $x-large;
|
||||
}
|
||||
}
|
||||
|
||||
.page__title,
|
||||
.page__meta,
|
||||
.page__lead,
|
||||
.btn {
|
||||
color: #fff;
|
||||
text-shadow: 1px 1px 4px rgba(#000, 0.5);
|
||||
}
|
||||
|
||||
.page__lead {
|
||||
max-width: $medium;
|
||||
}
|
||||
|
||||
.page__title {
|
||||
font-size: $type-size-2;
|
||||
|
||||
@include breakpoint($small) {
|
||||
font-size: $type-size-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page__hero-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
.page__hero-caption {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
padding: 2px 5px;
|
||||
color: #fff;
|
||||
font-family: $caption-font-family;
|
||||
font-size: $type-size-7;
|
||||
background: #000;
|
||||
text-align: right;
|
||||
z-index: 5;
|
||||
opacity: 0.5;
|
||||
border-radius: $border-radius 0 $border-radius 0;
|
||||
|
||||
@include breakpoint($large) {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Social sharing
|
||||
========================================================================== */
|
||||
|
||||
.page__share {
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid $border-color;
|
||||
|
||||
@include breakpoint(max-width $small) {
|
||||
.btn span {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page__share-title {
|
||||
margin-bottom: 10px;
|
||||
font-size: $type-size-6;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Page meta
|
||||
========================================================================== */
|
||||
|
||||
.page__meta {
|
||||
margin-top: 2em;
|
||||
color: mix(#fff, $gray, 25%);
|
||||
font-family: $sans-serif;
|
||||
font-size: $type-size-6;
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.page__meta-title {
|
||||
margin-bottom: 10px;
|
||||
font-size: $type-size-6;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Page taxonomy
|
||||
========================================================================== */
|
||||
|
||||
.page__taxonomy {
|
||||
.sep {
|
||||
display: none;
|
||||
}
|
||||
|
||||
strong {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.page__taxonomy-item {
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 8px;
|
||||
padding: 5px 10px;
|
||||
text-decoration: none;
|
||||
border: 1px solid $light-gray;
|
||||
border-radius: $border-radius;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
color: $link-color-hover;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Comments
|
||||
========================================================================== */
|
||||
|
||||
.page__comments {
|
||||
@include full();
|
||||
}
|
||||
|
||||
.page__comments-title {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 10px;
|
||||
padding-top: 2rem;
|
||||
font-size: $type-size-6;
|
||||
border-top: 1px solid $border-color;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.page__comments-form {
|
||||
padding: 1em;
|
||||
background: $lighter-gray;
|
||||
transition: $global-transition;
|
||||
|
||||
&.disabled {
|
||||
input,
|
||||
button,
|
||||
textarea,
|
||||
label {
|
||||
pointer-events: none;
|
||||
cursor: not-allowed;
|
||||
filter: alpha(opacity=65);
|
||||
box-shadow: none;
|
||||
opacity: 0.65;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.comment {
|
||||
@include clearfix();
|
||||
margin: 1em 0;
|
||||
|
||||
&:not(:last-child) {
|
||||
border-bottom: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.comment__avatar-wrapper {
|
||||
float: left;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
|
||||
@include breakpoint($large) {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
.comment__avatar {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
|
||||
@include breakpoint($large) {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
padding: 5px;
|
||||
border: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.comment__content-wrapper {
|
||||
float: right;
|
||||
width: calc(100% - 60px);
|
||||
|
||||
@include breakpoint($large) {
|
||||
width: calc(100% - 100px);
|
||||
}
|
||||
}
|
||||
|
||||
.comment__author {
|
||||
margin: 0;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.comment__date {
|
||||
@extend .page__meta;
|
||||
margin: 0;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Related
|
||||
========================================================================== */
|
||||
|
||||
.page__related {
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
border-top: 1px solid $border-color;
|
||||
@include clearfix();
|
||||
float: left;
|
||||
|
||||
@include breakpoint($large) {
|
||||
@include pre(2.5 of 12);
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.page__related-title {
|
||||
margin-bottom: 10px;
|
||||
font-size: $type-size-6;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
/* ==========================================================================
|
||||
PRINT STYLES
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
Hide the following elements on print
|
||||
========================================================================== */
|
||||
|
||||
@media print {
|
||||
.masthead,
|
||||
.toc,
|
||||
.page__share,
|
||||
.page__related,
|
||||
.ads,
|
||||
.page__footer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@@ -1,187 +0,0 @@
|
||||
/* ==========================================================================
|
||||
STYLE RESETS
|
||||
========================================================================== */
|
||||
|
||||
@include border-box-sizing;
|
||||
|
||||
html {
|
||||
/* apply a natural box layout model to all elements */
|
||||
box-sizing: border-box;
|
||||
background-color: $background-color;
|
||||
font-size: 16px;
|
||||
|
||||
@include breakpoint($medium) {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
@include breakpoint($large) {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
@include breakpoint($x-large) {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
/* Remove margin */
|
||||
|
||||
body { margin: 0; }
|
||||
|
||||
/* Selected elements */
|
||||
|
||||
::-moz-selection {
|
||||
color: #fff;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
::selection {
|
||||
color: #fff;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
/* Display HTML5 elements in IE6-9 and FF3 */
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Display block in IE6-9 and FF3 */
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
/* Prevents modern browsers from displaying 'audio' without controls */
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
/* Apply focus state */
|
||||
|
||||
a:focus {
|
||||
@extend %tab-focus;
|
||||
}
|
||||
|
||||
/* Remove outline from links */
|
||||
|
||||
a:hover,
|
||||
a:active {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Prevent sub and sup affecting line-height in all browsers */
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* img border in anchor's and image quality */
|
||||
|
||||
img {
|
||||
/* Responsive images (ensure images don't scale beyond their parents) */
|
||||
max-width: 100%; /* part 1: Set a maximum relative to the parent*/
|
||||
width: auto\9; /* IE7-8 need help adjusting responsive images*/
|
||||
height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/
|
||||
|
||||
vertical-align: middle;
|
||||
border: 0;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
/* Prevent max-width from affecting Google Maps */
|
||||
|
||||
#map_canvas img,
|
||||
.google-maps img {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
/* Consistent form font size in all browsers, margin changes, misc */
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
*overflow: visible; /* inner spacing ie IE6/7*/
|
||||
line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/
|
||||
cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
|
||||
}
|
||||
|
||||
label,
|
||||
select,
|
||||
button,
|
||||
input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"],
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
|
||||
}
|
||||
|
||||
input[type="search"] { /* Appearance in Safari/Chrome*/
|
||||
box-sizing: content-box;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
input[type="search"]::-webkit-search-decoration,
|
||||
input[type="search"]::-webkit-search-cancel-button {
|
||||
-webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* remove vertical scrollbar in IE6-9*/
|
||||
vertical-align: top; /* readability and alignment cross-browser*/
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user