From cbf0005312bb52725f636233aeeddf2382d10a86 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sat, 7 Jul 2012 10:57:53 -0700 Subject: [PATCH 0001/1324] Initial Commit --- .gitignore | 1 + Gemfile | 4 ++ Gemfile.lock | 30 +++++++++ Procfile | 1 + Readme.md | 147 ++++++++++++++++++++++++++++++++++++++++++ _config.yml | 1 + _layouts/default.html | 7 ++ _posts/.gitkeep | 0 index.html | 6 ++ posts.html | 12 ++++ 10 files changed, 209 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Procfile create mode 100644 Readme.md create mode 100644 _config.yml create mode 100644 _layouts/default.html create mode 100644 _posts/.gitkeep create mode 100644 index.html create mode 100644 posts.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c08f9add --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_site \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..f57ab404 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source :rubygems + +gem 'RedCloth' +gem 'jekyll' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..d1945a36 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,30 @@ +GEM + remote: http://rubygems.org/ + specs: + RedCloth (4.2.8) + albino (1.3.3) + posix-spawn (>= 0.3.6) + classifier (1.3.3) + fast-stemmer (>= 1.0.0) + directory_watcher (1.4.1) + fast-stemmer (1.0.0) + jekyll (0.11.0) + albino (>= 1.3.2) + classifier (>= 1.3.1) + directory_watcher (>= 1.1.1) + kramdown (>= 0.13.2) + liquid (>= 1.9.0) + maruku (>= 0.5.9) + kramdown (0.13.3) + liquid (2.2.2) + maruku (0.6.0) + syntax (>= 1.0.0) + posix-spawn (0.3.6) + syntax (1.0.0) + +PLATFORMS + ruby + +DEPENDENCIES + RedCloth + jekyll diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..42fcd119 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: jekyll --server $PORT diff --git a/Readme.md b/Readme.md new file mode 100644 index 00000000..93ed2d8a --- /dev/null +++ b/Readme.md @@ -0,0 +1,147 @@ +Note: You might want to look at https://github.com/markpundsack/jekyll-example-with-heroku-buildpack for a much simpler version! + +Creating a Jekyll App on Heroku Cedar (from GitHub) +=== + +Setup Jekyll +--- + +The first thing you have to do is install the jekyll gem. + + gem install jekyll + +Clone the git repository +--- + + git clone git@github.com:markpundsack/jekyll-heroku.git + cd jekyll-heroku + +Let's test it locally +--- + + jekyll --server --auto + +Open your browser and go to http://localhost:4000. + +You should see "Hello World". + +Deploying to Heroku +--- + +Install the Heroku gem + + gem install heroku + +Create a Heroku app + + heroku create --stack cedar + +Deploy! + + git push heroku master + +Test it: + + heroku open + +Creating a Jekyll App on Heroku Cedar (Manually) +=== + +Setup Jekyll +--- + +The first thing you have to do is install the jekyll gem. + + gem install jekyll + +Create the site structure +--- + +Create the app directory + + mkdir jekyll-app + +and create the following files: + + cd jekyll-app + touch _config.yml + touch index.html + mkdir _posts + mkdir _layouts + touch _layouts/default.html + +"Hello World" Jekyll +--- + +Let's create a Layout. Open _layouts/default.html and add: + + + + {{ content }} + + + +Now we need an index page. Open index.html and add: + + --- + layout: default + title: Jekyll Example Site + --- + +

Hello World

+ +Let's test it locally: + + jekyll --server --auto + +Open your browser and go to http://localhost:4000 + +You should see "Hello World" + +Deploying to Heroku +--- + +First, install the Heroku gem + + gem install heroku + +Create a Gemfile and add: + + source :rubygems + + gem 'RedCloth' + gem 'jekyll' + +Create the Gemfile.lock + + bundle install + +Create a Procfile + + echo "web: jekyll --server $PORT" > Procfile + +Exclude all of those files + + echo "exclude: [ Gemfile, Gemfile.lock, Procfile, vendor]" >> _config.yml + +Since Cedar will run Jekyll and generate the _site files automatically, they don't need to be check into git + + echo _site >> .gitignore + +Create a git repo and commit + + git init . + git add . + git commit + +Create a Heroku app + + heroku create --stack cedar + +Deploy! + + git push heroku master + +Test it: + + heroku open diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000..af9276ae --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +exclude: [ Gemfile, Gemfile.lock, Procfile, vendor, gems] diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 00000000..2b773df8 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,7 @@ + + + + {{ content }} + + + \ No newline at end of file diff --git a/_posts/.gitkeep b/_posts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/index.html b/index.html new file mode 100644 index 00000000..dde4a5f6 --- /dev/null +++ b/index.html @@ -0,0 +1,6 @@ +--- +layout: default +title: Jekyll Hello World +--- + +

Hello World

diff --git a/posts.html b/posts.html new file mode 100644 index 00000000..ab05afd7 --- /dev/null +++ b/posts.html @@ -0,0 +1,12 @@ +--- +layout: default +title: Jekyll Example Site +--- + +

Reports on the Reverse

+ + From d426f634e8614e5ef018b60b336a68fec179be83 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 10:10:10 -0400 Subject: [PATCH 0002/1324] Stashing several articles and layouts --- Gemfile | 12 ++- Gemfile.lock | 28 ++++++- Procfile | 4 +- _config.yml | 4 +- _layouts/default.html | 24 +++++- _layouts/post.html | 8 ++ _posts/2012-07-07-nsindexset.md | 21 +++++ _posts/2012-07-09-nsindexpath.md | 11 +++ _posts/2012-07-30-nscache.md | 38 +++++++++ _posts/2012-07-30-nssortdescriptor.md | 106 ++++++++++++++++++++++++++ _posts/2012-07-31-nsdatecomponents.md | 74 ++++++++++++++++++ config.rb | 8 ++ config.ru | 12 +++ css/ie.css | 5 ++ css/print.css | 3 + css/screen.css | 1 + index.html | 10 ++- posts.html | 12 --- sass/screen.sass | 2 + 19 files changed, 361 insertions(+), 22 deletions(-) create mode 100644 _layouts/post.html create mode 100644 _posts/2012-07-07-nsindexset.md create mode 100644 _posts/2012-07-09-nsindexpath.md create mode 100644 _posts/2012-07-30-nscache.md create mode 100644 _posts/2012-07-30-nssortdescriptor.md create mode 100644 _posts/2012-07-31-nsdatecomponents.md create mode 100644 config.rb create mode 100644 config.ru create mode 100644 css/ie.css create mode 100644 css/print.css create mode 100644 css/screen.css delete mode 100644 posts.html create mode 100644 sass/screen.sass diff --git a/Gemfile b/Gemfile index f57ab404..7efa0563 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,12 @@ source :rubygems -gem 'RedCloth' -gem 'jekyll' \ No newline at end of file +gem 'jekyll' +gem 'haml' + +gem 'rack-contrib', require: 'rack/contrib/try_static' +gem 'rack-rewrite', require: 'rack/rewrite' +gem 'rack-typekit', require: 'rack/typekit' + +gem 'thin' + +gem 'compass' diff --git a/Gemfile.lock b/Gemfile.lock index d1945a36..897778a3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,21 @@ GEM remote: http://rubygems.org/ specs: - RedCloth (4.2.8) albino (1.3.3) posix-spawn (>= 0.3.6) + chunky_png (1.2.5) classifier (1.3.3) fast-stemmer (>= 1.0.0) + compass (0.12.2) + chunky_png (~> 1.2) + fssm (>= 0.2.7) + sass (~> 3.1) + daemons (1.1.8) directory_watcher (1.4.1) + eventmachine (0.12.10) fast-stemmer (1.0.0) + fssm (0.2.9) + haml (3.1.6) jekyll (0.11.0) albino (>= 1.3.2) classifier (>= 1.3.1) @@ -20,11 +28,27 @@ GEM maruku (0.6.0) syntax (>= 1.0.0) posix-spawn (0.3.6) + rack (1.4.1) + rack-contrib (1.1.0) + rack (>= 0.9.1) + rack-rewrite (1.2.1) + rack-typekit (0.2.0) + rack (>= 1.2.0, <= 2.0.0) + sass (3.1.19) syntax (1.0.0) + thin (1.4.1) + daemons (>= 1.0.9) + eventmachine (>= 0.12.6) + rack (>= 1.0.0) PLATFORMS ruby DEPENDENCIES - RedCloth + compass + haml jekyll + rack-contrib + rack-rewrite + rack-typekit + thin diff --git a/Procfile b/Procfile index 42fcd119..e361750f 100644 --- a/Procfile +++ b/Procfile @@ -1 +1,3 @@ -web: jekyll --server $PORT +web: bundle exec thin start -p $PORT +jekyll: bundle exec jekyll +compass: bundle exec compass watch . diff --git a/_config.yml b/_config.yml index af9276ae..e87792e7 100644 --- a/_config.yml +++ b/_config.yml @@ -1 +1,3 @@ -exclude: [ Gemfile, Gemfile.lock, Procfile, vendor, gems] +exclude: [README.md, Gemfile, Gemfile.lock, Procfile, sass, config.rb, config.ru] +permalink: /posts/:title/ +lsi: false diff --git a/_layouts/default.html b/_layouts/default.html index 2b773df8..536fc488 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,7 +1,27 @@ - + + + + + NSHipster / {{ page.title }} + + + + + + +
+
+

NSHipster

+
- {{ content }} +
+ {{ content }} +
+
+

Created by Mattt Thompson

+
+
\ No newline at end of file diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 00000000..cfb3e27d --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,8 @@ +--- +layout: default +--- + +
+

{{ page.title }}

+ {{ content }} +
\ No newline at end of file diff --git a/_posts/2012-07-07-nsindexset.md b/_posts/2012-07-07-nsindexset.md new file mode 100644 index 00000000..fbc27cec --- /dev/null +++ b/_posts/2012-07-07-nsindexset.md @@ -0,0 +1,21 @@ +--- +layout: post +title: NSIndexSet + +ref: "https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html" +framework: Foundation +rating: 7.8 +--- + +`NSIndexSet` (and its mutable counterpart, `NSMutableIndexSet`) represents a sorted collection of unique unsigned integers--think of it like an `NSRange` that supports non-contiguous series. It has wicked fast operations to find indexes in ranges or set intersections, and all of the convenience methods you'd expect in a Foundation collection class. + +You'll find `NSIndexSet` all throughout the Foundation framework. Anytime a method gets multiple elements from a sorted collection, like an array or a table view, you can be sure that an `NSIndexSet` parameter is in the mix. + +If you look hard enough, you may start to find aspects of your data model that could be represented with `NSIndexSet`. For example AFNetworking uses an index set to represent HTTP response status codes: the user defines a set of "acceptable" codes (in the 2XX range, by default), and the response is checked by using `containsIndex:`. + +- List of user preference switches to toggle? You could replace that with a single `NSIndexSet` and an `enum`. +- Table view with a dynamic number of pre-defined sections? Same as before: `NSIndexSet` & `enum`, along with a giant `switch` statement. +- Filtering a list of items by a set of composable conditions? Ditch the `NSPredicate`; instead, cache the indexes of objects that fulfill each condition, and then get the union of those indexes as conditions are added and removed. + +Overall, `NSIndex` is a solid class. A fair bit nerdier than its collection class siblings, but it has its place. It's at least a good reminder the useful things that you find by paying attention to what Foundation uses in its own APIs. + diff --git a/_posts/2012-07-09-nsindexpath.md b/_posts/2012-07-09-nsindexpath.md new file mode 100644 index 00000000..043bb081 --- /dev/null +++ b/_posts/2012-07-09-nsindexpath.md @@ -0,0 +1,11 @@ +--- +layout: post +title: NSIndexPath + +ref: "https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSIndexPath_Class/Reference/Reference.html" +framework: Foundation +rating: 6.7 +published: false +--- + +I was a fan of `NSIndexPath` before their `UIKit` extensions dropped. Now if you go see them in concert, it's overrun by teenagers with those Hot Topic shirts with Scott Forstall's face on them (you know the ones). Sure, they know all the words to `row` and `section`, but any deeper into the catalog, and they're lost. Back to sexting on their iPhones. \ No newline at end of file diff --git a/_posts/2012-07-30-nscache.md b/_posts/2012-07-30-nscache.md new file mode 100644 index 00000000..e7ff5409 --- /dev/null +++ b/_posts/2012-07-30-nscache.md @@ -0,0 +1,38 @@ +--- +layout: post +title: NSCache + +ref: "https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCache_Class/Reference/Reference.html" +framework: Foundation +rating: 7.5 +--- + +Poor `NSCache`, always being overshadowed by `NSMutableDictionary` in the most inappropriate circumstances. It's like no one knows its there, ready to provide all of that garbage collection behavior that developers take great pains to re-implement themselves. + +That's right: `NSCache` is basically just an `NSMutableDictionary` that automatically evicts objects in order to free up space in memory as needed. No need to respond to memory warnings or contrive a cache-clearing timer mechanism. The only other difference is that keys aren't copied as they are in an `NSMutableDictionary`, which is actually to its advantage (no need for keys to conform to ``). If developers only knew... + +But you're not like other devs, right? You won't overlook `NSCache`, will you? + +That's not to say that there aren't a few warts and inexplicable caveats--far from it. `NSCache` is kind of a hot mess. + +Take `setObject:forKey:cost:`, for example. It's the same `setObject:forKey:` method as before, but with this `cost` parameter. What is that, you ask? Well, even the documentation isn't quite sure: + +> The cost value is used to compute a sum encompassing the costs of all the objects in the cache. When memory is limited or when the total cost of the cache eclipses the maximum allowed total cost, the cache could begin an eviction process to remove some of its elements. + +Alright, so far so good... + +> However, this eviction process is not in a guaranteed order. As a consequence, if you try to manipulate the cost values to achieve some specific behavior, the consequences could be detrimental to your program. + +Huh? So what's the point, then? + +> Typically, the obvious cost is the size of the value in bytes. If that information is not readily available, you should not go through the trouble of trying to compute it, as doing so will drive up the cost of using the cache. + +So wait, what's a _non-obvious_ cost value? Any guidelines for what a memory limit should be? How about an order of magnitude, even? "Arbitrarily guess wrong and suffer bad performance" doesn't sound too good... + +> Pass in 0 for the cost value if you otherwise have nothing useful to pass, or simply use the setObject:forKey: method, which does not require a cost value to be passed in. + +Read: don't use this method unless you work at Apple and know the original author personally. + +There's also a whole part about controlling whether objects are automatically evicted with `evictsObjectsWithDiscardedContent` & ``, but it will probably just cause you more problems. + +That all said, developers should be using `NSCache` a lot more than they currently are. Anything in your project that you're already calling a "cache" and either using `NSMutableDictionary` or implementing yourself would be prime candidates for replacement. Just be sure to stick to the classics: `objectForKey:`, `setObject:forKey:` & `removeObjectForKey:`. \ No newline at end of file diff --git a/_posts/2012-07-30-nssortdescriptor.md b/_posts/2012-07-30-nssortdescriptor.md new file mode 100644 index 00000000..10b55ee8 --- /dev/null +++ b/_posts/2012-07-30-nssortdescriptor.md @@ -0,0 +1,106 @@ +--- +layout: post +title: NSSortDescriptor + +ref: "https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/Reference/Reference.html" +framework: Foundation +rating: 8.4 +--- + +Sorting: the old mainstay of the exams of an intro CS class and whiteboards of an entry-level programming interview. When was the last time you really needed to know how to implement Quicksort anyway? + +When making apps, sorting is just something you can assume to be fast, and utility is measured in how easy it is to do what you need. In this respect, Foundation's `NSSortDescriptor` is perhaps the most useful and elegant implementations you'll find. + +`NSSortDescriptor` is constructed with either 2 or 3 parameters: + +- `key`: for a given collection, the key for the corresponding value to be sorted on for each object in the collection. +- `ascending`: a boolean specifying whether the collection should be sorted in ascending (`YES`) or descending (`NO`) order. + +There is an optional third parameter that relates to how the sorted values are compared to one another. By default, this is a simple equality check, but this behavior can be changed by passing either a `selector` (`SEL`) or `comparator` (`NSComparator`). Any time you're sorting string values, be sure to pass the selector `localizedStandardCompare:`, which will sort according to the language rules of the current locale (locales may differ on ordering of case, diacritics, and so forth). + +Collection classes like `NSArray` and `NSSet` have methods to return sorted arrays of the objects that take a `sortDescriptors` parameter. Sort descriptors are applied in order, so that any subsequent descriptors are used to break ties in the previous results so far. + +Let's say that we have a `Person` object that has properties for `firstName` & `lastName` of type `NSString *`, and `age`, which is an `NSUInteger`. Given the following dataset: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
index0123
firstNameAliceBobCharlieQuentin
lastNameSmithJonesSmithAlberts
age24273331
+ + @interface Person : NSObject + @property NSString *firstName; + @property NSString *lastName; + @property NSNumber *age; + @end + + @implementation Person + + - (NSString *)description { + return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName]; + } + + @end + + #pragma mark - + + NSArray *firstNames = @[ @"Alice", @"Bob", @"Charlie", @"Quentin" ]; + NSArray *lastNames = @[ @"Smith", @"Jones", @"Smith", @"Alberts" ]; + NSArray *ages = @[ @24, @27, @33, @31 ]; + + NSMutableArray *people = [NSMutableArray array]; + [firstNames enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + Person *person = [[Person alloc] init]; + person.firstName = [firstNames objectAtIndex:idx]; + person.lastName = [lastNames objectAtIndex:idx]; + person.age = [ages objectAtIndex:idx]; + [people addObject:person]; + }]; + + NSSortDescriptor *firstNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES selector:@selector(localizedStandardCompare:)]; + NSSortDescriptor *lastNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES selector:@selector(localizedStandardCompare:)]; + NSSortDescriptor *ageSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO]; + + NSLog(@"By age: %@", [people sortedArrayUsingDescriptors:@[ ageSortDescriptor ]]); + // "Charlie Smith", "Quentin Alberts", "Bob Jones", "Alice Smith" + + + NSLog(@"By first name: %@", [people sortedArrayUsingDescriptors:@[ firstNameSortDescriptor ]]); + // "Alice Smith", "Bob Jones", "Charlie Smith", "Quentin Alberts" + + + NSLog(@"By last name, first name: %@", [people sortedArrayUsingDescriptors:@[ lastNameSortDescriptor, firstNameSortDescriptor ]]); + // "Quentin Alberts", "Bob Jones", "Alice Smith", "Charlie Smith" + +Sort descriptors can be found throughout Foundation as well as most other frameworks--including a prominent role in Core Data. Anytime your own classes need to define sort ordering, follow the convention of specifying a `sortDescriptors` parameter as appropriate. + +Because, truth is, sorting should be treated in terms of business logic, not mathematical formulas and map-reduce functions. `NSSortDescriptor` is a slam dunk, and will have you pining for it anytime you venture out of Objective-C. diff --git a/_posts/2012-07-31-nsdatecomponents.md b/_posts/2012-07-31-nsdatecomponents.md new file mode 100644 index 00000000..0d2d4adc --- /dev/null +++ b/_posts/2012-07-31-nsdatecomponents.md @@ -0,0 +1,74 @@ +--- +layout: post +title: NSDateComponents + +ref: "https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateComponents_Class/Reference/Reference.html" +framework: Foundation +rating: 6.9 +--- + +`NSDateComponents` serves an important role in the date and time APIs in Foundation. By itself, it's just a container for information about a date, such as its month, year, day of month, week of year, or whether that month is a leap month. Combined with `NSCalendar`, `NSDateComponents` becomes a remarkably convenient interchange format for calendar calculations. + +Whereas dates represent a particular moment in time, date component depend on which calendar system is being used to represent them, which may differ wildly from what we're used to with the [Gregorian Calendar](http://en.wikipedia.org/wiki/Gregorian_calendar). For example, the [Islamic Calendar](http://en.wikipedia.org/wiki/Islamic_calendar) has 354 or 355 days in a year, whereas the [Buddhist calendar](http://en.wikipedia.org/wiki/Buddhist_calendar) may have 354, 355, 384, or 385 days, depending on the year. + +The most common use of `NSDateComponents` is to determine information about a given date, which may be used to group events by day or week, for instance. To do this, get the calendar for the current locale, and then use `NSCalendar -components:fromDate:`. + +``` + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate *date = [NSDate date]; + [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit) fromDate:date]; +``` + +The `components` parameter is a [bitmask](http://en.wikipedia.org/wiki/Bitmask) of the date component values to retrieve: + +- NSEraCalendarUnit +- NSYearCalendarUnit +- NSMonthCalendarUnit +- NSDayCalendarUnit +- NSHourCalendarUnit +- NSMinuteCalendarUnit +- NSSecondCalendarUnit +- NSWeekCalendarUnit +- NSWeekdayCalendarUnit +- NSWeekdayOrdinalCalendarUnit +- NSQuarterCalendarUnit +- NSWeekOfMonthCalendarUnit +- NSWeekOfYearCalendarUnit +- NSYearForWeekOfYearCalendarUnit +- NSCalendarCalendarUnit +- NSTimeZoneCalendarUnit + +Since it would be expensive to compute all of the possible values, specify only the ones you'll use in subsequent calculations (joining with `|`, the bitwise `OR` operator). + +Another way you may use `NSDateComponents` would be to make relative date calculations, such as determining the date yesterday, next week, or 5 hours and 30 minuts from now. Use `NSCalendar -dateByAddingComponents:toDate:options:`: + +``` + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate *date = [NSDate date]; + + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setWeek:1]; + [components setHour:12]; + + NSLog(@"1 week and twelve hours from now: %@", [calendar dateByAddingComponents:components toDate:date options:0]); +``` + +One last example of how you can use `NSDateComponents` would be to use them to create an `NSDate` object from components. `NSCalendar -dateFromComponents:` is the method you'll use here: + +``` + NSCalendar *calendar = [NSCalendar currentCalendar]; + + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setYear:1987]; + [components setMonth:3]; + [components setDay:17]; + [components setHour:14]; + [components setMinute:20]; + [components setSecond:0]; + + NSLog(@"Awesome time: %@", [calendar dateFromComponents:components]); +``` + +What's particularly interesting about this approach is that a date can be determined by information other than the normal month/day/year approach. If you pass enough information to uniquely determine the date, such as the year (e.g. 2012), and day of the the year (e.g. 213 of 365) you would get 7/31/2012 at midnight (because no time was specified, it defaults to 0). Note that passing inconsistent components will either result in some information being discarded, or `nil` being returned. + +`NSDateComponents` and its relationship to `NSCalendar` highlight the distinct advantage having a pedantically-engineered framework like Foundation at your disposal. You may not be doing calendar calculations every day, but when it comes time, knowing how to use `NSDateComponents` will save you eons of frustration. diff --git a/config.rb b/config.rb new file mode 100644 index 00000000..64bda1c4 --- /dev/null +++ b/config.rb @@ -0,0 +1,8 @@ +http_path = "/" +css_dir = "css" +sass_dir = "sass" +images_dir = "images" +javascripts_dir = "js" + +output_style = :compressed +line_comments = false diff --git a/config.ru b/config.ru new file mode 100644 index 00000000..002af166 --- /dev/null +++ b/config.ru @@ -0,0 +1,12 @@ +require 'bundler' +Bundler.require + +STDOUT.sync = true + +#use Rack::Typekit, :kit => "nlj2rqt" +use Rack::TryStatic, + :root => "_site", + :urls => %w[/], + :try => ['.html', 'index.html', '/index.html'] + +run lambda { [200, {'Content-Type' => 'text/html'}, ['Not Found']]} diff --git a/css/ie.css b/css/ie.css new file mode 100644 index 00000000..5cd5b6c5 --- /dev/null +++ b/css/ie.css @@ -0,0 +1,5 @@ +/* Welcome to Compass. Use this file to write IE specific override styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/css/print.css b/css/print.css new file mode 100644 index 00000000..b0e9e456 --- /dev/null +++ b/css/print.css @@ -0,0 +1,3 @@ +/* Welcome to Compass. Use this file to define print styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/css/screen.css b/css/screen.css new file mode 100644 index 00000000..bf0dca85 --- /dev/null +++ b/css/screen.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block} diff --git a/index.html b/index.html index dde4a5f6..24318c92 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,12 @@ --- layout: default -title: Jekyll Hello World +title: NSHipster --- -

Hello World

+

NSHipster

+
    +{% for post in site.posts %} +
  • {{ post.date | date_to_string }} » {{ post.title }}
  • +{% endfor %} +
+ diff --git a/posts.html b/posts.html deleted file mode 100644 index ab05afd7..00000000 --- a/posts.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: default -title: Jekyll Example Site ---- - -

Reports on the Reverse

-
    -{% for post in site.posts %} -
  • {{ post.date | date_to_string }} » {{ post.title }}
  • -{% endfor %} -
- diff --git a/sass/screen.sass b/sass/screen.sass new file mode 100644 index 00000000..acd6ca8c --- /dev/null +++ b/sass/screen.sass @@ -0,0 +1,2 @@ +@import "compass/reset" + From c567a090c247a1429059e34a8340fa783ee2a645 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 13:47:44 -0400 Subject: [PATCH 0003/1324] Stashing more changes --- Procfile | 2 +- _layouts/default.html | 10 +++- _layouts/post.html | 14 +++++- ...07-30-nscache.md => 2012-07-14-nscache.md} | 0 ...ptor.md => 2012-07-24-nssortdescriptor.md} | 0 _posts/2012-07-31-nsdatecomponents.md | 44 +++++++++--------- ...indexpath.md => 2012-08-06-nsindexpath.md} | 0 css/screen.css | 2 +- images/moustache.svg | 15 ++++++ images/plaid.png | Bin 0 -> 780 bytes index.html | 1 - sass/_colors.sass | 1 + sass/_layout.sass | 26 +++++++++++ sass/_typography.sass | 13 ++++++ sass/components/_logo.sass | 33 +++++++++++++ sass/pages/_index.sass | 0 sass/pages/_post.sass | 0 sass/screen.sass | 12 +++++ 18 files changed, 144 insertions(+), 29 deletions(-) rename _posts/{2012-07-30-nscache.md => 2012-07-14-nscache.md} (100%) rename _posts/{2012-07-30-nssortdescriptor.md => 2012-07-24-nssortdescriptor.md} (100%) rename _posts/{2012-07-09-nsindexpath.md => 2012-08-06-nsindexpath.md} (100%) create mode 100755 images/moustache.svg create mode 100644 images/plaid.png create mode 100644 sass/_colors.sass create mode 100644 sass/_layout.sass create mode 100644 sass/_typography.sass create mode 100644 sass/components/_logo.sass create mode 100644 sass/pages/_index.sass create mode 100644 sass/pages/_post.sass diff --git a/Procfile b/Procfile index e361750f..81c31559 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1,3 @@ web: bundle exec thin start -p $PORT -jekyll: bundle exec jekyll +jekyll: bundle exec jekyll --auto compass: bundle exec compass watch . diff --git a/_layouts/default.html b/_layouts/default.html index 536fc488..8995b4d7 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -6,13 +6,19 @@ - +
-

NSHipster

+
+

NSHipster

+
+ +
+ [ ] +
diff --git a/_layouts/post.html b/_layouts/post.html index cfb3e27d..175a8afa 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -3,6 +3,16 @@ ---
-

{{ page.title }}

+
+

{{ page.title }}

+
+ {{ content }} -
\ No newline at end of file + + + \ No newline at end of file diff --git a/_posts/2012-07-30-nscache.md b/_posts/2012-07-14-nscache.md similarity index 100% rename from _posts/2012-07-30-nscache.md rename to _posts/2012-07-14-nscache.md diff --git a/_posts/2012-07-30-nssortdescriptor.md b/_posts/2012-07-24-nssortdescriptor.md similarity index 100% rename from _posts/2012-07-30-nssortdescriptor.md rename to _posts/2012-07-24-nssortdescriptor.md diff --git a/_posts/2012-07-31-nsdatecomponents.md b/_posts/2012-07-31-nsdatecomponents.md index 0d2d4adc..1a3fd710 100644 --- a/_posts/2012-07-31-nsdatecomponents.md +++ b/_posts/2012-07-31-nsdatecomponents.md @@ -13,36 +13,36 @@ Whereas dates represent a particular moment in time, date component depend on wh The most common use of `NSDateComponents` is to determine information about a given date, which may be used to group events by day or week, for instance. To do this, get the calendar for the current locale, and then use `NSCalendar -components:fromDate:`. -``` + NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *date = [NSDate date]; [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit) fromDate:date]; -``` + The `components` parameter is a [bitmask](http://en.wikipedia.org/wiki/Bitmask) of the date component values to retrieve: -- NSEraCalendarUnit -- NSYearCalendarUnit -- NSMonthCalendarUnit -- NSDayCalendarUnit -- NSHourCalendarUnit -- NSMinuteCalendarUnit -- NSSecondCalendarUnit -- NSWeekCalendarUnit -- NSWeekdayCalendarUnit -- NSWeekdayOrdinalCalendarUnit -- NSQuarterCalendarUnit -- NSWeekOfMonthCalendarUnit -- NSWeekOfYearCalendarUnit -- NSYearForWeekOfYearCalendarUnit -- NSCalendarCalendarUnit -- NSTimeZoneCalendarUnit +- `NSEraCalendarUnit` +- `NSYearCalendarUnit` +- `NSMonthCalendarUnit` +- `NSDayCalendarUnit` +- `NSHourCalendarUnit` +- `NSMinuteCalendarUnit` +- `NSSecondCalendarUnit` +- `NSWeekCalendarUnit` +- `NSWeekdayCalendarUnit` +- `NSWeekdayOrdinalCalendarUnit` +- `NSQuarterCalendarUnit` +- `NSWeekOfMonthCalendarUnit` +- `NSWeekOfYearCalendarUnit` +- `NSYearForWeekOfYearCalendarUnit` +- `NSCalendarCalendarUnit` +- `NSTimeZoneCalendarUnit` Since it would be expensive to compute all of the possible values, specify only the ones you'll use in subsequent calculations (joining with `|`, the bitwise `OR` operator). Another way you may use `NSDateComponents` would be to make relative date calculations, such as determining the date yesterday, next week, or 5 hours and 30 minuts from now. Use `NSCalendar -dateByAddingComponents:toDate:options:`: -``` + NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *date = [NSDate date]; @@ -51,11 +51,11 @@ Another way you may use `NSDateComponents` would be to make relative date calcul [components setHour:12]; NSLog(@"1 week and twelve hours from now: %@", [calendar dateByAddingComponents:components toDate:date options:0]); -``` + One last example of how you can use `NSDateComponents` would be to use them to create an `NSDate` object from components. `NSCalendar -dateFromComponents:` is the method you'll use here: -``` + NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [[NSDateComponents alloc] init]; @@ -67,7 +67,7 @@ One last example of how you can use `NSDateComponents` would be to use them to c [components setSecond:0]; NSLog(@"Awesome time: %@", [calendar dateFromComponents:components]); -``` + What's particularly interesting about this approach is that a date can be determined by information other than the normal month/day/year approach. If you pass enough information to uniquely determine the date, such as the year (e.g. 2012), and day of the the year (e.g. 213 of 365) you would get 7/31/2012 at midnight (because no time was specified, it defaults to 0). Note that passing inconsistent components will either result in some information being discarded, or `nil` being returned. diff --git a/_posts/2012-07-09-nsindexpath.md b/_posts/2012-08-06-nsindexpath.md similarity index 100% rename from _posts/2012-07-09-nsindexpath.md rename to _posts/2012-08-06-nsindexpath.md diff --git a/css/screen.css b/css/screen.css index bf0dca85..16b292de 100644 --- a/css/screen.css +++ b/css/screen.css @@ -1 +1 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block} +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}html body{font-size:92%}html body pre code{font-size:83%}header h1{font-weight:700}article h1{font-weight:700;font-size:2em}html body{padding:3em 0}div[role="container"]{width:950px;margin:0 auto;overflow:hidden;*zoom:1}div[role="container"] header{overflow:hidden;*zoom:1;margin-bottom:1em}div[role="container"]>header{margin-bottom:2em}div[role="container"] article{display:inline;float:left;margin-right:10px;width:630px;padding-right:80px}* html div[role="container"] article{overflow-x:hidden}div[role="container"] article+aside{padding-top:3.75em}div[role="container"] footer{clear:both;border-top:1px #ccc solid;margin-top:3em;padding-top:3em}#logo{padding:0.5em;border:6px red solid;display:inline-block !important}header hgroup{display:inline;float:left;margin-right:10px;width:630px;padding-right:40px}* html header hgroup{overflow-x:hidden}header hgroup h2{padding:0 1em;font-style:italic}figure{display:inline;float:left;margin-right:0;width:150px;margin-right:-40px;margin-top:-35px;font-size:7.5em;font-weight:bold;font-family:menlo,mono-space;color:red;width:300px;background:url("/images/moustache.svg") center center no-repeat;text-align:center}* html figure{overflow-x:hidden}figure img{width:200px;height:180px;display:inline-block;display:none}body{line-height:1.5;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;color:#333;font-size:75%}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#222}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.50em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1.00em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.50em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{display:inline;float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p .right{display:inline;float:right;margin:1.5em 0 1.5em 1.5em;padding:0}a{text-decoration:underline;color:#06c}a:visited{color:#004c99}a:focus{color:#09f}a:hover{color:#09f}a:active{color:#bf00ff}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em "andale mono","lucida console",monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}table.striped tr:nth-child(even) td,table tr.even td{background:#e5ecf9}tfoot{font-style:italic}caption{background:#eee}.quiet{color:#666}.loud{color:#111} diff --git a/images/moustache.svg b/images/moustache.svg new file mode 100755 index 00000000..c9aed159 --- /dev/null +++ b/images/moustache.svg @@ -0,0 +1,15 @@ + + + + + + image/svg+xml + + + + + + + + + \ No newline at end of file diff --git a/images/plaid.png b/images/plaid.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9d4630b7720bf81935b08b342a598799bbd1be GIT binary patch literal 780 zcmV+n1M~ceP) zL2l(B42Ge4N0OIh6XV7(O-e_@RACP&p zL&Bgd)VZVG13Vz}Xk*Nvxobn=_Wmp&^T_oZG;2L4^!2+QkaCas2F+JPm60B|2Bg*_ zjzKfcyOHs}@|KuFkJTf2eSR^ztvFU5gm|vcYx8y9m{)! z1!V4I$UJgg*rPHabLW8MYo8@ON&%TW1oE$*7xT!I@u+tP@WEZahKG8D8D#DN-n$~8 zCF(&K>vw68xdUWbAC}lcwH5UCJ_Tg%0Ec{u%lvY6M))51VD11!rartsYpa>%5yv2v zIc5Q=tiOJAlR=8JyY2TW&H_KKVvzd04h8}0bJ=*pH~-SNM>&&xn?(fVETagv#B6=# z2h}h0y7MXx(wzll*t#|Ih6(&*RC$CMv|^pkb$XBm zWF7%!zNJBH)plo~_lG5B9sw!q6woU5>>2JiahW%d0Pi32w>#EwCk`J%u;0HsLD-;` z+=0Gk0hvb_Vg{|}PCV5t zBep?$+=)|Y4QPV7auMkz!ys+$#EI~h*fjHQXRxnL0qJxH=(@~LRznNjJ+1_#*&Sfu zR%6O~>kk8IZXH3_tFexHbw_?~#DaogAS@uG80fq|t*SAam!4=xd*g)SOdwA_ipc zP(0w(^QGzsPW-_C@rW~b5;tdABv6kKgDfuq^16SDV7UN0kA46cOlguWsi3z20000< KMNUMnLSTZc^LKIp literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 24318c92..f7bc25a8 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,6 @@ title: NSHipster --- -

NSHipster

    {% for post in site.posts %}
  • {{ post.date | date_to_string }} » {{ post.title }}
  • diff --git a/sass/_colors.sass b/sass/_colors.sass new file mode 100644 index 00000000..d0aaa828 --- /dev/null +++ b/sass/_colors.sass @@ -0,0 +1 @@ +$accent-color: red \ No newline at end of file diff --git a/sass/_layout.sass b/sass/_layout.sass new file mode 100644 index 00000000..511c6d5d --- /dev/null +++ b/sass/_layout.sass @@ -0,0 +1,26 @@ +html body + padding: 3em 0 + +div[role="container"] + +container + + header + +clearfix + + margin-bottom: 1em + + & > header + margin-bottom: 2em + + article + +column(16) + +append(2) + + article + aside + padding-top: 3.75em + + footer + clear: both + border-top: 1px #ccc solid + margin-top: 3em + padding-top: 3em \ No newline at end of file diff --git a/sass/_typography.sass b/sass/_typography.sass new file mode 100644 index 00000000..ae14bf60 --- /dev/null +++ b/sass/_typography.sass @@ -0,0 +1,13 @@ +html body + font-size: 92% + + pre code + font-size: 83% + +header h1 + font-weight: 700 + +article + h1 + font-weight: 700 + font-size: 2em \ No newline at end of file diff --git a/sass/components/_logo.sass b/sass/components/_logo.sass new file mode 100644 index 00000000..aaad6dbf --- /dev/null +++ b/sass/components/_logo.sass @@ -0,0 +1,33 @@ +#logo + padding: 0.5em + border: 6px $accent-color solid + display: inline-block !important + +header hgroup + +column(16) + +append(1) + + h2 + padding: 0 1em + font-style: italic + +figure + +column(4, true) + margin-right: -40px + margin-top: -35px + font-size: 7.5em + font-weight: bold + font-family: menlo, mono-space + color: $accent-color + width: 300px + + background: url("/images/moustache.svg") center center no-repeat + + text-align: center + + img + width: 200px + height: 180px + display: inline-block + display: none + diff --git a/sass/pages/_index.sass b/sass/pages/_index.sass new file mode 100644 index 00000000..e69de29b diff --git a/sass/pages/_post.sass b/sass/pages/_post.sass new file mode 100644 index 00000000..e69de29b diff --git a/sass/screen.sass b/sass/screen.sass index acd6ca8c..9e7f86c5 100644 --- a/sass/screen.sass +++ b/sass/screen.sass @@ -1,2 +1,14 @@ @import "compass/reset" +@import "blueprint" + +@import "./colors" +@import "./typography" +@import "./layout" + +@import "./components/logo" + +@import "./pages/index" +@import "./pages/post" + ++blueprint-typography From 88bbb94584d573af1df3738ba4384fc05c397563 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:08:28 -0400 Subject: [PATCH 0004/1324] Gogogog --- _config.yml | 4 +-- _layouts/default.html | 15 ++++++----- _layouts/post.html | 14 +++++++--- _plugins/only_first_p.rb | 54 ++++++++++++++++++++++++++++++++++++++ css/screen.css | 2 +- index.html | 7 ++--- sass/_layout.sass | 7 ++++- sass/_typography.sass | 27 +++++++++++++++++-- sass/components/_logo.sass | 39 ++++++++++++++++++++++----- sass/screen.sass | 2 +- 10 files changed, 145 insertions(+), 26 deletions(-) create mode 100644 _plugins/only_first_p.rb diff --git a/_config.yml b/_config.yml index e87792e7..9b49feb5 100644 --- a/_config.yml +++ b/_config.yml @@ -1,3 +1,3 @@ exclude: [README.md, Gemfile, Gemfile.lock, Procfile, sass, config.rb, config.ru] -permalink: /posts/:title/ -lsi: false +permalink: /:title/ +lsi: false \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html index 8995b4d7..0f5c2b55 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -13,12 +13,14 @@
    -

    NSHipster

    +

    + + NS + Hipster + +

    +

    a journal of the overlooked bits in Objective-C

    - -
    - [ ] -
    @@ -26,7 +28,8 @@

    NSHipster

    diff --git a/_layouts/post.html b/_layouts/post.html index 175a8afa..62dd195b 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -11,8 +11,14 @@

    {{ page.title }}

    \ No newline at end of file diff --git a/_plugins/only_first_p.rb b/_plugins/only_first_p.rb new file mode 100644 index 00000000..c1b4856c --- /dev/null +++ b/_plugins/only_first_p.rb @@ -0,0 +1,54 @@ +require 'nokogiri' + +module Jekyll + module AssetFilter + @@only_first_p_config = nil + @@only_first_p_default_config = { + "show_read_more_link" => true, + "read_more_link_text" => "Read more" + } + + def only_first_p(post) + output = "

    " + output << Nokogiri::HTML(post["content"]).at_css("p").inner_html + output << %{

    } + + if only_first_p_config()['show_read_more_link'] + output << %{} + output << only_first_p_config()['read_more_link_text'] + output << %{} + end + + output + end + + def only_first_p_config + if @@only_first_p_config == nil + jekyll_configuration = Jekyll.configuration({}) + + if jekyll_configuration['only_first_p'] == nil + @@only_first_p_config = @@only_first_p_default_config + else + if jekyll_configuration['only_first_p'].kind_of?(Object) + @@only_first_p_config = {} + + @@only_first_p_default_config.each.each do |key,value| + if jekyll_configuration['only_first_p'][key] == nil + @@only_first_p_config[key] = value + else + @@only_first_p_config[key] = jekyll_configuration['only_first_p'][key] + end + end + else + @@only_first_p_config = @@only_first_p_default_config + end + end + end + + @@only_first_p_config + end + + end +end + +Liquid::Template.register_filter(Jekyll::AssetFilter) \ No newline at end of file diff --git a/css/screen.css b/css/screen.css index 16b292de..acde63a6 100644 --- a/css/screen.css +++ b/css/screen.css @@ -1 +1 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}html body{font-size:92%}html body pre code{font-size:83%}header h1{font-weight:700}article h1{font-weight:700;font-size:2em}html body{padding:3em 0}div[role="container"]{width:950px;margin:0 auto;overflow:hidden;*zoom:1}div[role="container"] header{overflow:hidden;*zoom:1;margin-bottom:1em}div[role="container"]>header{margin-bottom:2em}div[role="container"] article{display:inline;float:left;margin-right:10px;width:630px;padding-right:80px}* html div[role="container"] article{overflow-x:hidden}div[role="container"] article+aside{padding-top:3.75em}div[role="container"] footer{clear:both;border-top:1px #ccc solid;margin-top:3em;padding-top:3em}#logo{padding:0.5em;border:6px red solid;display:inline-block !important}header hgroup{display:inline;float:left;margin-right:10px;width:630px;padding-right:40px}* html header hgroup{overflow-x:hidden}header hgroup h2{padding:0 1em;font-style:italic}figure{display:inline;float:left;margin-right:0;width:150px;margin-right:-40px;margin-top:-35px;font-size:7.5em;font-weight:bold;font-family:menlo,mono-space;color:red;width:300px;background:url("/images/moustache.svg") center center no-repeat;text-align:center}* html figure{overflow-x:hidden}figure img{width:200px;height:180px;display:inline-block;display:none}body{line-height:1.5;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;color:#333;font-size:75%}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#222}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.50em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1.00em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.50em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{display:inline;float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p .right{display:inline;float:right;margin:1.5em 0 1.5em 1.5em;padding:0}a{text-decoration:underline;color:#06c}a:visited{color:#004c99}a:focus{color:#09f}a:hover{color:#09f}a:active{color:#bf00ff}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em "andale mono","lucida console",monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}table.striped tr:nth-child(even) td,table tr.even td{background:#e5ecf9}tfoot{font-style:italic}caption{background:#eee}.quiet{color:#666}.loud{color:#111} +html body{font-size:97%}html body pre code{font-size:83%}header h1{font-weight:700}article h1{font-weight:700;font-size:2em}article code{color:#555}article pre code{color:#000}article blockquote{border-left:4px #eee solid;padding-left:1em}aside h1{font-size:1.5em}a{color:red !important}a:link{text-decoration:none}a:hover{text-decoration:underline}html body{padding:3em 0}div[role="container"]{width:950px;margin:0 auto;overflow:hidden;*zoom:1}div[role="container"] header{overflow:hidden;*zoom:1;margin-bottom:1em}div[role="container"]>header{margin-bottom:2em}div[role="container"] article{display:inline;float:left;margin-right:10px;width:630px;padding-right:80px;margin-bottom:2em}* html div[role="container"] article{overflow-x:hidden}div[role="container"] article+aside{padding-top:5.325em}div[role="container"] aside section{margin-bottom:1em}div[role="container"] footer{clear:both;border-top:1px #ccc solid;margin-top:3em;padding-top:3em}#logo{font-size:1em}#logo a{text-decoration:none !important}#logo a:active acronym{color:#666}#logo acronym{font-size:10em;font-weight:900;border-bottom:none;color:red;letter-spacing:-0.12em}#logo strong{position:absolute;display:block;float:left;width:200px;height:130px;background:url('/images/moustache.svg?1343750676') center center no-repeat;background-size:360px 200px;margin-top:-124px;text-indent:-9999px;color:transparent;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=5000%);opacity:50%}header hgroup h1{display:inline;float:left;margin-right:10px;width:150px;padding-right:120px}* html header hgroup h1{overflow-x:hidden}header hgroup h2{display:inline;float:left;margin-right:10px;width:390px;font-style:italic}* html header hgroup h2{overflow-x:hidden}figure{display:inline;float:left;margin-right:0;width:150px;margin-right:-40px;margin-top:-35px;font-size:7.5em;font-weight:bold;font-family:menlo,mono-space;color:red;width:300px;background:url("/images/moustache.svg") center center no-repeat;text-align:center}* html figure{overflow-x:hidden}figure img{width:200px;height:180px;display:inline-block;display:none}body{line-height:1.5;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;color:#333;font-size:75%}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#222}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}h1{font-size:3em;line-height:1;margin-bottom:0.50em}h2{font-size:2em;margin-bottom:0.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1.00em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.50em}h6{font-size:1em;font-weight:bold}p{margin:0 0 1.5em}p .left{display:inline;float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p .right{display:inline;float:right;margin:1.5em 0 1.5em 1.5em;padding:0}a{text-decoration:underline;color:#06c}a:visited{color:#004c99}a:focus{color:#09f}a:hover{color:#09f}a:active{color:#bf00ff}blockquote{margin:1.5em;color:#666;font-style:italic}strong,dfn{font-weight:bold}em,dfn{font-style:italic}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em "andale mono","lucida console",monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:1.5em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}table.striped tr:nth-child(even) td,table tr.even td{background:#e5ecf9}tfoot{font-style:italic}caption{background:#eee}.quiet{color:#666}.loud{color:#111} diff --git a/index.html b/index.html index f7bc25a8..333f481c 100644 --- a/index.html +++ b/index.html @@ -3,9 +3,10 @@ title: NSHipster --- - diff --git a/sass/_layout.sass b/sass/_layout.sass index 511c6d5d..5d4f3182 100644 --- a/sass/_layout.sass +++ b/sass/_layout.sass @@ -15,9 +15,14 @@ div[role="container"] article +column(16) +append(2) + margin-bottom: 2em article + aside - padding-top: 3.75em + padding-top: 5.325em + + aside + section + margin-bottom: 1em footer clear: both diff --git a/sass/_typography.sass b/sass/_typography.sass index ae14bf60..22a00c10 100644 --- a/sass/_typography.sass +++ b/sass/_typography.sass @@ -1,5 +1,5 @@ html body - font-size: 92% + font-size: 97% pre code font-size: 83% @@ -10,4 +10,27 @@ header h1 article h1 font-weight: 700 - font-size: 2em \ No newline at end of file + font-size: 2em + + code + color: #555 + + pre code + color: #000 + + blockquote + border-left: 4px #eee solid + padding-left: 1em + +aside + h1 + font-size: 1.5em + +a + color: $accent-color !important + + &:link + text-decoration: none + + &:hover + text-decoration: underline \ No newline at end of file diff --git a/sass/components/_logo.sass b/sass/components/_logo.sass index aaad6dbf..857a8746 100644 --- a/sass/components/_logo.sass +++ b/sass/components/_logo.sass @@ -1,14 +1,41 @@ #logo - padding: 0.5em - border: 6px $accent-color solid - display: inline-block !important + font-size: 1em + + a + text-decoration: none !important + + &:active + acronym + color: #666 + + acronym + font-size: 10em + font-weight: 900 + border-bottom: none + color: $accent-color + letter-spacing: -0.12em + + strong + position: absolute + display: block + float: left + + width: 200px + height: 130px + background: image-url("moustache.svg") center center no-repeat + background-size: 360px 200px + margin-top: -124px + text-indent: -9999px + color: transparent + +opacity(50%) header hgroup - +column(16) - +append(1) + h1 + +column(4) + +append(3) h2 - padding: 0 1em + +column(10) font-style: italic figure diff --git a/sass/screen.sass b/sass/screen.sass index 9e7f86c5..f46a1250 100644 --- a/sass/screen.sass +++ b/sass/screen.sass @@ -1,4 +1,4 @@ -@import "compass/reset" +@import "compass" @import "blueprint" @import "./colors" From a27f3906fed40af09de6a75236cbceee4214c455 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:09:27 -0400 Subject: [PATCH 0005/1324] Adding Nokogiri to Gemfile --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 7efa0563..36e003c6 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source :rubygems gem 'jekyll' gem 'haml' +gem 'nokogiri' gem 'rack-contrib', require: 'rack/contrib/try_static' gem 'rack-rewrite', require: 'rack/rewrite' diff --git a/Gemfile.lock b/Gemfile.lock index 897778a3..1720c153 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,6 +27,7 @@ GEM liquid (2.2.2) maruku (0.6.0) syntax (>= 1.0.0) + nokogiri (1.5.5) posix-spawn (0.3.6) rack (1.4.1) rack-contrib (1.1.0) @@ -48,6 +49,7 @@ DEPENDENCIES compass haml jekyll + nokogiri rack-contrib rack-rewrite rack-typekit From 657e6600dfbabc415b2e67ffe392d15235d4078a Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:11:34 -0400 Subject: [PATCH 0006/1324] Shuffling chairs on the deck of the Gemfile --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 36e003c6..81eacda8 100644 --- a/Gemfile +++ b/Gemfile @@ -1,8 +1,8 @@ source :rubygems +gem 'nokogiri' gem 'jekyll' gem 'haml' -gem 'nokogiri' gem 'rack-contrib', require: 'rack/contrib/try_static' gem 'rack-rewrite', require: 'rack/rewrite' From d675dfdb45223d6d93f7500715a4d87b4984c311 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:16:22 -0400 Subject: [PATCH 0007/1324] Removing Nokogiri --- Gemfile | 1 - Gemfile.lock | 2 -- 2 files changed, 3 deletions(-) diff --git a/Gemfile b/Gemfile index 81eacda8..7efa0563 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,5 @@ source :rubygems -gem 'nokogiri' gem 'jekyll' gem 'haml' diff --git a/Gemfile.lock b/Gemfile.lock index 1720c153..897778a3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,7 +27,6 @@ GEM liquid (2.2.2) maruku (0.6.0) syntax (>= 1.0.0) - nokogiri (1.5.5) posix-spawn (0.3.6) rack (1.4.1) rack-contrib (1.1.0) @@ -49,7 +48,6 @@ DEPENDENCIES compass haml jekyll - nokogiri rack-contrib rack-rewrite rack-typekit From f84a5097bbde43daf4c592fb502fb9400be7c6a9 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:18:08 -0400 Subject: [PATCH 0008/1324] Touching to force deploy --- config.ru | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.ru b/config.ru index 002af166..4f9887fd 100644 --- a/config.ru +++ b/config.ru @@ -9,4 +9,4 @@ use Rack::TryStatic, :urls => %w[/], :try => ['.html', 'index.html', '/index.html'] -run lambda { [200, {'Content-Type' => 'text/html'}, ['Not Found']]} +run lambda { [404, {'Content-Type' => 'text/html'}, ['Not Found']]} From b95fc48024e93a22ce9a6b3d7a0e8bdf971b4190 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:20:44 -0400 Subject: [PATCH 0009/1324] Re-adding Nokogiri --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 7efa0563..81eacda8 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,6 @@ source :rubygems +gem 'nokogiri' gem 'jekyll' gem 'haml' diff --git a/Gemfile.lock b/Gemfile.lock index 897778a3..1720c153 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -27,6 +27,7 @@ GEM liquid (2.2.2) maruku (0.6.0) syntax (>= 1.0.0) + nokogiri (1.5.5) posix-spawn (0.3.6) rack (1.4.1) rack-contrib (1.1.0) @@ -48,6 +49,7 @@ DEPENDENCIES compass haml jekyll + nokogiri rack-contrib rack-rewrite rack-typekit From bed2ff41a8a919beafe669a230c645a93e20dd97 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:24:51 -0400 Subject: [PATCH 0010/1324] Shot in the dark with Procfile --- Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile b/Procfile index 81c31559..f4afb2cc 100644 --- a/Procfile +++ b/Procfile @@ -1,3 +1,3 @@ -web: bundle exec thin start -p $PORT +thin: bundle exec thin start -p $PORT jekyll: bundle exec jekyll --auto compass: bundle exec compass watch . From 6f7422b70be4e979673300ee2837b502ad7ba3fe Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 31 Jul 2012 15:41:48 -0400 Subject: [PATCH 0011/1324] Adding Mint script --- _layouts/default.html | 1 + 1 file changed, 1 insertion(+) diff --git a/_layouts/default.html b/_layouts/default.html index 0f5c2b55..fe501d65 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -32,5 +32,6 @@

    a journal of the overlooked bits in Objective-C

    Created by Mattt Thompson

+ \ No newline at end of file From b00448144a5273dfa7680c90621dc27283a9ec03 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Wed, 1 Aug 2012 14:44:06 -0400 Subject: [PATCH 0012/1324] Polish, polish, polish --- _config.yml | 4 ++- _layouts/default.html | 31 +++++++++++++--------- _layouts/post.html | 8 +++--- css/screen.css | 2 +- index.html | 17 +++++++----- sass/_animations.sass | 11 ++++++++ sass/_layout.sass | 15 +++++++++-- sass/_typography.sass | 22 +++++++++++++--- sass/components/_logo.sass | 53 ++++++++++++-------------------------- sass/pages/_index.sass | 7 +++++ sass/screen.sass | 1 + 11 files changed, 105 insertions(+), 66 deletions(-) create mode 100644 sass/_animations.sass diff --git a/_config.yml b/_config.yml index 9b49feb5..e4b3e103 100644 --- a/_config.yml +++ b/_config.yml @@ -1,3 +1,5 @@ +title: NSHipster +description: NSHipster is a journal of the overlooked bits in Objective-C and Cocoa. Updated weekly. exclude: [README.md, Gemfile, Gemfile.lock, Procfile, sass, config.rb, config.ru] permalink: /:title/ -lsi: false \ No newline at end of file +lsi: false diff --git a/_layouts/default.html b/_layouts/default.html index fe501d65..3c207f46 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -2,7 +2,7 @@ - NSHipster / {{ page.title }} + {{ page.title }} @@ -12,15 +12,20 @@
-
-

- - NS - Hipster - -

-

a journal of the overlooked bits in Objective-C

-
+

+ + NS + Hipster + + +

+ + {% unless page.id %} + + {% endunless %} +
@@ -28,8 +33,10 @@

a journal of the overlooked bits in Objective-C

diff --git a/_layouts/post.html b/_layouts/post.html index 62dd195b..b23c592b 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -4,20 +4,22 @@
- From 214132ccf1d8d436c15e1434675fed05cc5a9d75 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 12:12:05 -0700 Subject: [PATCH 0321/1324] Removing unused Chartbeat script --- nshipster.cn/_layouts/default.html | 1 - nshipster.com/_layouts/default.html | 1 - 2 files changed, 2 deletions(-) diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html index 01ee63b7..e268f35b 100755 --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -60,7 +60,6 @@ {% endif %} - diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 939d0532..c741b4e1 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -61,7 +61,6 @@ {% endif %} - From a3bfcc497be9238c1dbba05ee2f1dd0ec86bfb79 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 12:12:26 -0700 Subject: [PATCH 0322/1324] Improving mobile stylesheet --- assets/sass/_mobile.sass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/sass/_mobile.sass b/assets/sass/_mobile.sass index 5ae9d4ff..4c116013 100644 --- a/assets/sass/_mobile.sass +++ b/assets/sass/_mobile.sass @@ -121,7 +121,7 @@ padding: 1em 10px .promotion - #cover + #cover, #cfhipsterref-cover float: none !important margin: 2em auto !important display: block !important From 6275ab6a315de143d679ebf0170b1358a8fcf0cd Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 12:12:39 -0700 Subject: [PATCH 0323/1324] Updating _posts --- nshipster.cn/_posts | 2 +- nshipster.com/_posts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nshipster.cn/_posts b/nshipster.cn/_posts index e4faa0bc..ef5467a2 160000 --- a/nshipster.cn/_posts +++ b/nshipster.cn/_posts @@ -1 +1 @@ -Subproject commit e4faa0bc0f2a0c0cce0249c1a272fba911c3eba2 +Subproject commit ef5467a28c4eda655a3a2ab0165a288c0f216695 diff --git a/nshipster.com/_posts b/nshipster.com/_posts index a16d6d7f..ec3dde09 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit a16d6d7f54e2dcab719a35039adf9e9e8de911bd +Subproject commit ec3dde0905bf5f04ff582a1129e67a3364eb37ff From f11beca05ddd57e6ad228b0ce7d714f76639add0 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 12:13:16 -0700 Subject: [PATCH 0324/1324] Ignoring and deleting _drafts --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6e6c610e..672c6b96 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ _site +_drafts build assets/css From 87ba3f06c40f32fb30a18278e8671acfaaea29c6 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 13:39:58 -0700 Subject: [PATCH 0325/1324] Adding favicon assets --- assets/favicon.ico | Bin 5430 -> 34494 bytes assets/touch-icon-ipad-retina.png | Bin 0 -> 6948 bytes assets/touch-icon-ipad.png | Bin 0 -> 2538 bytes assets/touch-icon-iphone-retina.png | Bin 0 -> 4473 bytes assets/touch-icon-iphone.png | Bin 0 -> 1917 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/touch-icon-ipad-retina.png create mode 100644 assets/touch-icon-ipad.png create mode 100644 assets/touch-icon-iphone-retina.png create mode 100644 assets/touch-icon-iphone.png diff --git a/assets/favicon.ico b/assets/favicon.ico index 231bfa03635d8b4889b50cab9a823fa764de8338..78099882a503bcb7049b07bd8e39f7aa09d0c9f1 100644 GIT binary patch literal 34494 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 literal 5430 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 literal 0 HcmV?d00001 diff --git a/assets/touch-icon-iphone-retina.png b/assets/touch-icon-iphone-retina.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e323b9bf190e28c59d252216f7ed79dc10c545 GIT binary patch literal 4473 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 Date: Sun, 13 Apr 2014 13:46:04 -0700 Subject: [PATCH 0326/1324] Adding multi-resolution favicon and Apple touch icons --- Rakefile | 4 ++++ nshipster.cn/_layouts/default.html | 7 ++++++- nshipster.com/_layouts/default.html | 9 +++++++-- nshipster.ru/_layouts/default.html | 21 ++++++--------------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Rakefile b/Rakefile index 12c2888c..2eed7853 100644 --- a/Rakefile +++ b/Rakefile @@ -41,6 +41,10 @@ namespace :publish do done s3cmd put --recursive --progress -M --acl-public --add-header 'Content-Encoding:gzip' assets/css s3://nshipster.#{tld}/ + + s3cmd put --progress -M --acl-public assets/favicon.ico s3://nshipster.#{tld}/ + + s3cmd sync --progress -M --acl-public assets/ s3://nshipster.#{tld}/ --exclude '*.*' --include '*.png' --verbose } end diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html index e268f35b..1a36b1cd 100755 --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -23,7 +23,12 @@ - + + + + + + diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index c741b4e1..72cd2e0f 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -4,7 +4,7 @@ {% if page.id %} - {{ page.title | strip_html }} : {{ site.title }} + {{ page.title | replace:'<br/>',' ' | strip_html }} {% if page.description %} {% else %} @@ -22,7 +22,12 @@ - + + + + + + diff --git a/nshipster.ru/_layouts/default.html b/nshipster.ru/_layouts/default.html index b7b4cbf2..51164171 100644 --- a/nshipster.ru/_layouts/default.html +++ b/nshipster.ru/_layouts/default.html @@ -18,7 +18,12 @@ - + + + + + + @@ -126,19 +131,5 @@

{{ group }}

{% endif %} - - From a9ac48fa0031e5aea4f392b2e01c6ccc023ea289 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 14:13:45 -0700 Subject: [PATCH 0327/1324] Fixing stylizing of subtitle in Chinese site --- assets/sass/components/_logo.sass | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/assets/sass/components/_logo.sass b/assets/sass/components/_logo.sass index 06af494d..357e71c0 100644 --- a/assets/sass/components/_logo.sass +++ b/assets/sass/components/_logo.sass @@ -29,12 +29,17 @@ strong display: none + em + clear: both + display: block + text-align: center + width: 126px + #moustache position: absolute display: block float: left - margin-top: -140px margin-left: -31px +opacity(0.9) From f5ec139b9d7bded88ca377c78b85622cc2a292c1 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 13 Apr 2014 14:14:07 -0700 Subject: [PATCH 0328/1324] Adding canonical link Fixing page titles --- nshipster.cn/_layouts/default.html | 4 +++- nshipster.com/_layouts/default.html | 4 +++- nshipster.com/_posts | 2 +- nshipster.ru/_layouts/default.html | 13 ++++++++++--- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html index 1a36b1cd..98f1dadc 100755 --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -4,15 +4,17 @@ {% if page.id %} - {{ page.title | strip_html }} : {{ site.title }} + {{ page.title | replace:'<br/>',' ' | strip_html }} - {{ site.title }} {% if page.description %} {% else %} {% endif %} + {% else %} {{ page.title | strip_html }} + {% endif %} diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 72cd2e0f..0ea23150 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -4,15 +4,17 @@ {% if page.id %} - {{ page.title | replace:'<br/>',' ' | strip_html }} + {{ page.title | replace:'<br/>',' ' | strip_html }} - {{ site.title }} {% if page.description %} {% else %} {% endif %} + {% else %} {{ page.title | strip_html }} + {% endif %} diff --git a/nshipster.com/_posts b/nshipster.com/_posts index ec3dde09..e7966628 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit ec3dde0905bf5f04ff582a1129e67a3364eb37ff +Subproject commit e7966628eeef09ac7154312e6261926749768e9b diff --git a/nshipster.ru/_layouts/default.html b/nshipster.ru/_layouts/default.html index 51164171..565fbc53 100644 --- a/nshipster.ru/_layouts/default.html +++ b/nshipster.ru/_layouts/default.html @@ -4,11 +4,18 @@ {% if page.id %} - {{ page.title }} : {{ site.title }} + {{ page.title | replace:'<br/>',' ' | strip_html }} - {{ site.title }} + {% if page.description %} + + {% else %} + + {% endif %} + {% else %} - {{ page.title }} + {{ page.title | strip_html }} + + {% endif %} - From f1246702d7fcd3de688179b57e86611c407d1bda Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 21 Apr 2014 10:29:27 -0700 Subject: [PATCH 0329/1324] Fixing RSS feeds --- nshipster.cn/feed.xml | 30 +++++++++++++++--------------- nshipster.com/feed.xml | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/nshipster.cn/feed.xml b/nshipster.cn/feed.xml index d6cdec10..95576804 100755 --- a/nshipster.cn/feed.xml +++ b/nshipster.cn/feed.xml @@ -4,19 +4,19 @@ layout: rss - - {{ site.title }} - {{ site.description | strip_html }} - {{ site.url }} - {{ site.posts.first.date | date_to_rfc822 }} - {% for post in site.posts %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date_to_rfc822 }} - {{ site.url }}{{ post.url }} - {{ site.url }}{{ post.url }} - - {% endfor %} - + + {{ site.title }} + {{ site.description | strip_html }} + {{ site.url }} + {{ site.posts.first.date | date_to_rfc822 }} + {% for post in site.posts %} + + {{ post.title | replace:'<br/>',' ' | xml_escape }} + {{ post.content | xml_escape }} + {{ post.date | date_to_rfc822 }} + {{ site.url }}{{ post.url }} + {{ site.url }}{{ post.url }} + + {% endfor %} + diff --git a/nshipster.com/feed.xml b/nshipster.com/feed.xml index 993f4faf..95576804 100755 --- a/nshipster.com/feed.xml +++ b/nshipster.com/feed.xml @@ -11,7 +11,7 @@ layout: rss {{ site.posts.first.date | date_to_rfc822 }} {% for post in site.posts %} - {{ post.title | xml_escape }} + {{ post.title | replace:'<br/>',' ' | xml_escape }} {{ post.content | xml_escape }} {{ post.date | date_to_rfc822 }} {{ site.url }}{{ post.url }} From acad2b1f991c8a266d7b23cb6401c18cba665f33 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 21 Apr 2014 10:29:54 -0700 Subject: [PATCH 0330/1324] Updating English categories Removing Gauges Tracker ID --- _config.en.yml | 7 +++---- _config.ru.yml | 3 --- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/_config.en.yml b/_config.en.yml index 12feefd7..8e22b1d3 100644 --- a/_config.en.yml +++ b/_config.en.yml @@ -10,9 +10,6 @@ markdown: redcarpet pygments: lexer: objective-c -gauges: - tracker: 510be6d4108d7b438800005f - groups: - Foundation - CoreFoundation @@ -20,5 +17,7 @@ groups: - UIKit - Objective-C - Open Source - - Testing + - MapKit + - Xcode + - Trivia - Miscellanea diff --git a/_config.ru.yml b/_config.ru.yml index d133811b..5c73ed8c 100644 --- a/_config.ru.yml +++ b/_config.ru.yml @@ -10,7 +10,4 @@ markdown: redcarpet pygments: lexer: objective-c -gauges: - tracker: 52ddb711de2e264f7800002d - groups: From 343dc50c4ecf7dc191181c556289362f185a01b6 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 22:18:39 -0700 Subject: [PATCH 0331/1324] Upgrading to Jekyll 2.0 Optimizing Jekyll configuration --- Gemfile | 6 ++--- Gemfile.lock | 72 ++++++++++++++++++++++++++++++-------------------- _config.en.yml | 9 +++++-- 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/Gemfile b/Gemfile index c078c97b..c8b6c764 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,9 @@ ruby '2.0.0' source "https://rubygems.org" -gem 'nokogiri' gem 'jekyll' - +gem 'nokogiri' gem 'redcarpet' -gem 'haml' +gem 'pygments.rb' gem 'compass' +gem 'rake' diff --git a/Gemfile.lock b/Gemfile.lock index 5f4b0052..cac788ea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,58 +2,71 @@ GEM remote: https://rubygems.org/ specs: blankslate (2.1.2.4) - chunky_png (1.2.9) + celluloid (0.15.2) + timers (~> 1.1.0) + celluloid-io (0.15.0) + celluloid (>= 0.15.0) + nio4r (>= 0.5.0) + chunky_png (1.3.1) classifier (1.3.4) fast-stemmer (>= 1.0.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.7.0) colorator (0.1) - commander (4.1.5) - highline (~> 1.6.11) - compass (0.12.2) + compass (0.12.6) chunky_png (~> 1.2) fssm (>= 0.2.7) - sass (~> 3.1) + sass (~> 3.2.19) + execjs (2.0.2) fast-stemmer (1.0.2) ffi (1.9.3) fssm (0.2.10) - haml (4.0.5) - tilt - highline (1.6.20) - jekyll (1.4.3) + jekyll (2.0.3) classifier (~> 1.3) colorator (~> 0.1) - commander (~> 4.1.3) + jekyll-coffeescript (~> 1.0) + jekyll-sass-converter (~> 1.0) + kramdown (~> 1.3) liquid (~> 2.5.5) - listen (~> 1.3) - maruku (~> 0.7.0) + listen (~> 2.5) + mercenary (~> 0.3.3) pygments.rb (~> 0.5.0) - redcarpet (~> 2.3.0) - safe_yaml (~> 0.9.7) + redcarpet (~> 3.1) + safe_yaml (~> 1.0) toml (~> 0.1.0) + jekyll-coffeescript (1.0.0) + coffee-script (~> 2.2) + jekyll-sass-converter (1.0.0) + sass (~> 3.2) + kramdown (1.3.3) liquid (2.5.5) - listen (1.3.1) + listen (2.7.4) + celluloid (>= 0.15.2) + celluloid-io (>= 0.15.0) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) - rb-kqueue (>= 0.2) - maruku (0.7.0) - mini_portile (0.5.2) - nokogiri (1.6.1) - mini_portile (~> 0.5.0) + mercenary (0.3.3) + mini_portile (0.5.3) + nio4r (1.0.0) + nokogiri (1.6.2) + mini_portile (~> 0.5.2) parslet (1.5.0) blankslate (~> 2.0) posix-spawn (0.3.8) pygments.rb (0.5.4) posix-spawn (~> 0.3.6) yajl-ruby (~> 1.1.0) + rake (10.3.1) rb-fsevent (0.9.4) - rb-inotify (0.9.3) + rb-inotify (0.9.4) ffi (>= 0.5.0) - rb-kqueue (0.2.0) - ffi (>= 0.5.0) - redcarpet (2.3.0) - safe_yaml (0.9.7) - sass (3.2.13) - tilt (2.0.0) - toml (0.1.0) + redcarpet (3.1.1) + safe_yaml (1.0.3) + sass (3.2.19) + timers (1.1.0) + toml (0.1.1) parslet (~> 1.5.0) yajl-ruby (1.1.0) @@ -62,7 +75,8 @@ PLATFORMS DEPENDENCIES compass - haml jekyll nokogiri + pygments.rb + rake redcarpet diff --git a/_config.en.yml b/_config.en.yml index 8e22b1d3..6bd574ad 100644 --- a/_config.en.yml +++ b/_config.en.yml @@ -5,10 +5,15 @@ url: http://nshipster.com title: NSHipster description: "NSHipster is a journal of the overlooked bits in Objective-C and Cocoa. Updated weekly." permalink: /:title/ +timezone: America/Los_Angeles lsi: false + markdown: redcarpet -pygments: - lexer: objective-c +redcarpet: + extensions: ["no_intra_emphasis", "fenced_code_blocks", "disable_indented_code_blocks", "autolink", "strikethrough", "highlight", "superscript", "tables", "footnotes", "with_toc_data"] + +highlighter: pygments + groups: - Foundation From 51bd95784486f51224415f6e08c2c7113f280496 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 22:19:01 -0700 Subject: [PATCH 0332/1324] Setting timezone for NSHipster.cn --- _config.zh.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/_config.zh.yml b/_config.zh.yml index ccaadd09..2b982065 100644 --- a/_config.zh.yml +++ b/_config.zh.yml @@ -5,6 +5,7 @@ url: http://nshipster.cn title: NSHipster description: "NSHipster 关注被忽略的 Objective-C 和 Cocoa 特性。每周更新。" permalink: /:title/ +timezone: Asia/Shanghai lsi: false markdown: redcarpet pygments: From 0174baa0f20a9b7128cc51a43229ec96485031c3 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 22:24:49 -0700 Subject: [PATCH 0333/1324] Adding bundle exec to commands --- Rakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 2eed7853..8f81311b 100644 --- a/Rakefile +++ b/Rakefile @@ -10,7 +10,7 @@ namespace :publish do end system %{ - jekyll build --config _config.#{locale}.yml + bundle exec jekyll build --config _config.#{locale}.yml find _site/ -iname "*.html" -exec tidy -config tidy.conf {} + find _site/ -iname '*.html' -exec gzip -n --best {} + find _site/ -iname '*.xml' -exec gzip -n --best {} + @@ -34,7 +34,7 @@ namespace :publish do end system %{ - compass compile assets --force + bundle exec compass compile assets --force find assets/css -iname '*.css' -exec gzip -n --best {} + for f in `find assets/css -iname '*.gz'`; do mv $f ${f%.gz} From 580c0298d7762a050b2b1b7697482a3373a8ebc2 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 22:25:07 -0700 Subject: [PATCH 0334/1324] Changing theme to modified version of Solarized --- assets/sass/_pygments.sass | 314 +++++++++---------------------------- 1 file changed, 70 insertions(+), 244 deletions(-) diff --git a/assets/sass/_pygments.sass b/assets/sass/_pygments.sass index f6ae73d8..cf3cd705 100644 --- a/assets/sass/_pygments.sass +++ b/assets/sass/_pygments.sass @@ -1,244 +1,70 @@ -.hll - background-color: #ffffcc - -.c - color: #999988 - font-style: italic - -/* Comment - -.err - color: #a61717 - background-color: #e3d2d2 - -/* Error - -.k, .o - color: #000000 - font-weight: bold - -/* Keyword -/* Operator - -.cm - color: #999988 - font-style: italic - -/* Comment.Multiline - -.cp - color: #999999 - font-weight: bold - font-style: italic - -/* Comment.Preproc - -.c1 - color: #999988 - font-style: italic - -/* Comment.Single - -.cs - color: #999999 - font-weight: bold - font-style: italic - -/* Comment.Special - -.gd - color: #000000 - background-color: #ffdddd - -/* Generic.Deleted - -.ge - color: #000000 - font-style: italic - -/* Generic.Emph - -.gr - color: #aa0000 - -/* Generic.Error - -.gh - color: #999999 - -/* Generic.Heading - -.gi - color: #000000 - background-color: #ddffdd - -/* Generic.Inserted - -.go - color: #888888 - -/* Generic.Output - -.gp - color: #555555 - -/* Generic.Prompt - -.gs - font-weight: bold - -/* Generic.Strong - -.gu - color: #aaaaaa - -/* Generic.Subheading - -.gt - color: #aa0000 - -/* Generic.Traceback - -.kc, .kd, .kn, .kp, .kr - color: #000000 - font-weight: bold - -/* Keyword.Constant -/* Keyword.Declaration -/* Keyword.Namespace -/* Keyword.Pseudo -/* Keyword.Reserved - -.kt - color: #445588 - font-weight: bold - -/* Keyword.Type - -.m - color: #009999 - -/* Literal.Number - -.s - color: #d01040 - -/* Literal.String - -.na - color: #008080 - -/* Name.Attribute - -.nb - color: #0086B3 - -/* Name.Builtin - -.nc - color: #445588 - font-weight: bold - -/* Name.Class - -.no - color: #008080 - -/* Name.Constant - -.nd - color: #3c5d5d - font-weight: bold - -/* Name.Decorator - -.ni - color: #800080 - -/* Name.Entity - -.ne, .nf, .nl - color: #990000 - font-weight: bold - -/* Name.Exception -/* Name.Function -/* Name.Label - -.nn - color: #555555 - -/* Name.Namespace - -.nt - color: #000080 - -/* Name.Tag - -.nv - color: #008080 - -/* Name.Variable - -.ow - color: #000000 - font-weight: bold - -/* Operator.Word - -.w - color: #bbbbbb - -/* Text.Whitespace - -.mf, .mh, .mi, .mo - color: #009999 - -/* Literal.Number.Float -/* Literal.Number.Hex -/* Literal.Number.Integer -/* Literal.Number.Oct - -.sb, .sc, .sd, .s2, .se, .sh, .si, .sx - color: #d01040 - -/* Literal.String.Backtick -/* Literal.String.Char -/* Literal.String.Doc -/* Literal.String.Double -/* Literal.String.Escape -/* Literal.String.Heredoc -/* Literal.String.Interpol -/* Literal.String.Other - -.sr - color: #009926 - -/* Literal.String.Regex - -.s1 - color: #d01040 - -/* Literal.String.Single - -.ss - color: #990073 - -/* Literal.String.Symbol - -.bp - color: #999999 - -/* Name.Builtin.Pseudo - -.vc, .vg, .vi - color: #008080 - -/* Name.Variable.Class -/* Name.Variable.Global -/* Name.Variable.Instance - -.il - color: #009999 - -/* Literal.Number.Integer.Long \ No newline at end of file +.highlight + .hll + background-color: #E5E5E5 + + background-color: #E5E5E5 + color: #586e75 + + .c + color: #93a1a1 + font-style: italic + .g + color: #d33682 + .k + color: #859900 + .l + color: #2aa198 + .n + color: #268bd2 + .cm, .cp, .c1, .cs + color: #93a1a1 + font-style: italic + .gd, .ge, .gr, .gh, .gi, .go, .gp, .gs, .gu, .gt + color: #d33682 + .kc + color: #859900 + font-weight: bold + .kd + color: #859900 + .kn + color: #dc322f + font-weight: bold + .kp, .kr + color: #859900 + .kt + color: #859900 + font-weight: bold + .ld + color: #2aa198 + .m + color: #2aa198 + font-weight: bold + .s + color: #2aa198 + .na + color: #268bd2 + .nb, .nc + color: #cb4b16 + .no, .nd, .ni, .ne, .nf, .nl, .nn, .nx, .py + color: #268bd2 + .nt + color: #268bd2 + font-weight: bold + .nv + color: #268bd2 + .ow + color: #859900 + .w + color: #586e75 + .mf, .mh, .mi, .mo + color: #2aa198 + font-weight: bold + .sb, .sc, .sd, .s2, .se, .sh, .si, .sx, .sr, .s1, .ss + color: #2aa198 + .bp + color: #cb4b16 + .vc, .vg, .vi + color: #268bd2 + .il + color: #2aa198 + font-weight: bold From eb169ed85bb92c7f725bfced0c1a3ffa7209786d Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 22:38:03 -0700 Subject: [PATCH 0335/1324] Whitespace --- _config.en.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/_config.en.yml b/_config.en.yml index 6bd574ad..97a89955 100644 --- a/_config.en.yml +++ b/_config.en.yml @@ -14,7 +14,6 @@ redcarpet: highlighter: pygments - groups: - Foundation - CoreFoundation From a46a64d0132b3e21bf8076a9dfa563e1f3c7c973 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 23:10:47 -0700 Subject: [PATCH 0336/1324] Adding dynamic list of translators to footer --- nshipster.cn/_layouts/default.html | 14 +++++++++++++- nshipster.cn/_plugins/uniq.rb | 11 +++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 nshipster.cn/_plugins/uniq.rb diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html index 98f1dadc..91b10fa9 100755 --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -98,7 +98,19 @@

- 本站文章由 Mattt Thompson 撰写、Croath LiuZihan Xu 翻译,基于创作共用 BY-NC 协议发布。 + 本站文章由 Mattt Thompson 撰写、 + + {% assign translators = site.posts | sort: 'translator' | map: 'translator' | uniq %} + + {% for translator in translators %} + {{ translator }} + {% if forloop.rindex0 > 0 %} + 、 + {% endif %} + {% endfor %} + 翻译。 + + 创作共用 BY-NC 协议发布。

diff --git a/nshipster.cn/_plugins/uniq.rb b/nshipster.cn/_plugins/uniq.rb new file mode 100644 index 00000000..bd3c3839 --- /dev/null +++ b/nshipster.cn/_plugins/uniq.rb @@ -0,0 +1,11 @@ +module Jekyll + module Uniq + REGEX = /(?:([a-z])([A-Z]+))/ + + def uniq(array) + array.compact.uniq + end + end +end + +Liquid::Template.register_filter(Jekyll::Uniq) From 4982b85db0cc5dedcda18564ad2a561d45734d7e Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 23:16:39 -0700 Subject: [PATCH 0337/1324] Adding categories to NSHipster.cn --- _config.zh.yml | 15 +++++++++++++-- nshipster.cn/_layouts/default.html | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/_config.zh.yml b/_config.zh.yml index 2b982065..7617968b 100644 --- a/_config.zh.yml +++ b/_config.zh.yml @@ -7,8 +7,19 @@ description: "NSHipster 关注被忽略的 Objective-C 和 Coco permalink: /:title/ timezone: Asia/Shanghai lsi: false + markdown: redcarpet -pygments: - lexer: objective-c +redcarpet: + extensions: ["no_intra_emphasis", "fenced_code_blocks", "disable_indented_code_blocks", "autolink", "strikethrough", "highlight", "superscript", "tables", "footnotes", "with_toc_data"] + +highlighter: pygments groups: + - Foundation + - CoreFoundation + - CoreGraphics + - UIKit + - Objective-C + - Open Source + - Trivia + - Miscellanea diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html index 91b10fa9..07ff0187 100755 --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -129,10 +129,10 @@

{{ group }}

    {% for post in site.posts | sort_by_title %} {% if post.framework == group %} -
  • {{ post.title }}
  • +
  • {{ post.title }}
  • {% elsif group == 'Miscellanea' %} {% unless site.groups contains post.framework %} -
  • {{ post.title }}
  • +
  • {{ post.title }}
  • {% endunless %} {% endif %} {% endfor %} From 80d2337c466c33283055197b70e1c8d3231dc3d6 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 12 May 2014 23:16:46 -0700 Subject: [PATCH 0338/1324] Updating _posts --- nshipster.cn/_posts | 2 +- nshipster.com/_posts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nshipster.cn/_posts b/nshipster.cn/_posts index ef5467a2..78733a6c 160000 --- a/nshipster.cn/_posts +++ b/nshipster.cn/_posts @@ -1 +1 @@ -Subproject commit ef5467a28c4eda655a3a2ab0165a288c0f216695 +Subproject commit 78733a6cc7695f9edb0db28de6285b66555c2143 diff --git a/nshipster.com/_posts b/nshipster.com/_posts index e7966628..ccbc4029 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit e7966628eeef09ac7154312e6261926749768e9b +Subproject commit ccbc4029d8e16d235578e9901ca9a63908a1c67b From ec8506953c3848ec9acda04c7d26d56fae9324e6 Mon Sep 17 00:00:00 2001 From: Croath Liu Date: Wed, 28 May 2014 16:46:45 +0800 Subject: [PATCH 0339/1324] update weibo button --- nshipster.cn/_layouts/post.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nshipster.cn/_layouts/post.html b/nshipster.cn/_layouts/post.html index ad5e3108..72758498 100755 --- a/nshipster.cn/_layouts/post.html +++ b/nshipster.cn/_layouts/post.html @@ -18,7 +18,7 @@

    Mattt Thompson 撰写,
    From d24650af8ad8f0d03241f24a14b989becc219fee Mon Sep 17 00:00:00 2001 From: Croath Liu Date: Wed, 28 May 2014 16:48:44 +0800 Subject: [PATCH 0340/1324] Update post.html --- nshipster.cn/_layouts/post.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nshipster.cn/_layouts/post.html b/nshipster.cn/_layouts/post.html index 72758498..59f4f0ec 100755 --- a/nshipster.cn/_layouts/post.html +++ b/nshipster.cn/_layouts/post.html @@ -18,7 +18,7 @@

    Mattt Thompson 撰写,
    From deeb920fe6c856842b40533052a2035275968aae Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Wed, 28 May 2014 18:34:33 -0700 Subject: [PATCH 0341/1324] Adding .tm_properties --- .tm_properties | 1 + 1 file changed, 1 insertion(+) create mode 100644 .tm_properties diff --git a/.tm_properties b/.tm_properties new file mode 100644 index 00000000..5dae65f6 --- /dev/null +++ b/.tm_properties @@ -0,0 +1 @@ +excludeDirectories = "{_site,}" From 4f14c9e34306241c3a6f5a6cfdabaaedc8238e86 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Wed, 28 May 2014 18:35:08 -0700 Subject: [PATCH 0342/1324] Updating layouts --- assets/sass/_promotion.sass | 21 +++++++-------------- nshipster.cn/_layouts/post.html | 12 ------------ nshipster.com/_layouts/post.html | 18 +++++++++++++++--- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/assets/sass/_promotion.sass b/assets/sass/_promotion.sass index 4524aaa8..46a391b4 100644 --- a/assets/sass/_promotion.sass +++ b/assets/sass/_promotion.sass @@ -3,7 +3,7 @@ padding-bottom: 1em - #cover, #cfhipsterref-cover + .cover +box-shadow(0px 3px 10px #d6d6d6) display: block width: 150px !important @@ -11,29 +11,22 @@ float: left margin-right: 40px border: 1px #ccc solid - background-image: url('//cdn.nshipster.com/images/book-cover.png') background-size: 150px 200px background-repeat: no-repeat + #the-nshipster-fake-book-cover + background-image: url('//cdn.nshipster.com/images/the-nshipster-fake-book-cover.png') + @media (-webkit-min-device-pixel-ratio:2) - #cover - background-image: url('//cdn.nshipster.com/images/book-cover@2x.png') + #the-nshipster-fake-book-cover + background-image: url('//cdn.nshipster.com/images/the-nshipster-fake-book-cover@2x.png') #cfhipsterref-cover - +box-shadow(0px 3px 10px #d6d6d6) - display: block - width: 150px !important - height: 200px !important - float: left - margin-right: 40px - border: 1px #ccc solid background-image: url('//cdn.nshipster.com/images/cfhipsterref-cover.png') - background-size: 150px 200px - background-repeat: no-repeat @media (-webkit-min-device-pixel-ratio:2) #cfhipsterref-cover - background-image: url('//cdn.nshipster.com/images/cfhipsterref-cover@2x.png') + background-image: url('//cdn.nshipster.com/images/book-cover@2x.png') div +column(18) diff --git a/nshipster.cn/_layouts/post.html b/nshipster.cn/_layouts/post.html index ad5e3108..5812702d 100755 --- a/nshipster.cn/_layouts/post.html +++ b/nshipster.cn/_layouts/post.html @@ -20,16 +20,4 @@

    Mattt Thompson 撰写, - -
    -
    -
    -
    -

    NSHipster:介绍Cocoa & Objective-C中的晦涩主题

    -

    现已推出

    -
    -

    这本书将作为现代iOS和Mac OS X开发者的基本指南,涵盖主题包括Objective-C,Foundation,以及UIKit。作为一个NSHipster也就是说要非常在意编写代码的工艺。通过理解和欣赏Objective-C,其框架以及其生态体系,开发者可以创造出让人愉悦并且激励用户的应用。

    - -
    -
    diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index 33f7d874..d734fb7e 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -17,12 +17,24 @@

    Written by Mattt Thompson on

    - - diff --git a/nshipster.com/css/screen.css b/nshipster.com/css/screen.css index ad820772..c7ff0b70 100644 --- a/nshipster.com/css/screen.css +++ b/nshipster.com/css/screen.css @@ -1593,7 +1593,10 @@ section h1 { /* line 190, ../sass/screen.sass */ [role="article"] figure { text-align: center; } - /* line 194, ../sass/screen.sass */ + /* line 193, ../sass/screen.sass */ + [role="article"] blockquote { + border-left: 3px #ff8000 solid; } + /* line 197, ../sass/screen.sass */ [role="article"] footer .contributor { float: left; display: block; @@ -1610,24 +1613,24 @@ section h1 { /* line 57, ../sass/neat/grid/_omega.scss */ [role="article"] footer .contributor:nth-child(2n+1) { clear: left; } - /* line 200, ../sass/screen.sass */ + /* line 203, ../sass/screen.sass */ [role="article"] footer .contributor:only-child { width: 100%; } - /* line 203, ../sass/screen.sass */ + /* line 206, ../sass/screen.sass */ [role="article"] footer .contributor:only-child .avatar { padding: 0 1em; } @media screen and (max-width: 480px) { - /* line 194, ../sass/screen.sass */ + /* line 197, ../sass/screen.sass */ [role="article"] footer .contributor { width: 100%; margin-bottom: 1em; } - /* line 210, ../sass/screen.sass */ + /* line 213, ../sass/screen.sass */ [role="article"] footer .contributor:not(:first-child) { border-top: none; } - /* line 213, ../sass/screen.sass */ + /* line 216, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { padding: 0; } } - /* line 216, ../sass/screen.sass */ + /* line 219, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { float: left; display: block; @@ -1636,7 +1639,7 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .avatar:last-child { margin-right: 0; } - /* line 219, ../sass/screen.sass */ + /* line 222, ../sass/screen.sass */ [role="article"] footer .contributor .details { float: left; display: block; @@ -1647,14 +1650,14 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .details:last-child { margin-right: 0; } - /* line 224, ../sass/screen.sass */ + /* line 227, ../sass/screen.sass */ [role="article"] footer .contributor .details span { font-weight: 700; } - /* line 227, ../sass/screen.sass */ + /* line 230, ../sass/screen.sass */ [role="article"] footer .contributor .details p { font-size: 0.75em; margin-top: 1em; } - /* line 231, ../sass/screen.sass */ + /* line 234, ../sass/screen.sass */ [role="article"] footer small { display: block; font-size: 1em; @@ -1663,7 +1666,7 @@ section h1 { text-transform: lowercase; font-variant: small-caps; margin-bottom: 1em; } - /* line 240, ../sass/screen.sass */ + /* line 243, ../sass/screen.sass */ [role="article"] footer [role="navigation"] { display: block; } /* line 15, ../sass/bourbon/addons/_clearfix.scss */ @@ -1671,7 +1674,7 @@ section h1 { content: ""; display: table; clear: both; } - /* line 243, ../sass/screen.sass */ + /* line 246, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #continue { float: left; display: block; @@ -1680,7 +1683,7 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer [role="navigation"] #continue:last-child { margin-right: 0; } - /* line 246, ../sass/screen.sass */ + /* line 249, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #related { float: left; display: block; @@ -1691,13 +1694,13 @@ section h1 { [role="article"] footer [role="navigation"] #related:last-child { margin-right: 0; } -/* line 250, ../sass/screen.sass */ +/* line 253, ../sass/screen.sass */ [role="contentinfo"] { text-align: center; margin-top: 2em; padding: 1em; } -/* line 255, ../sass/screen.sass */ +/* line 258, ../sass/screen.sass */ .avatar { -webkit-touch-callout: none; -webkit-user-select: none; @@ -1711,36 +1714,36 @@ section h1 { pointer-events: none; user-select: none; } -/* line 265, ../sass/screen.sass */ +/* line 268, ../sass/screen.sass */ html ::selection, html ::-moz-selection, body ::selection, body ::-moz-selection { background: rgba(76, 49, 80, 0.5); color: white; } -/* line 269, ../sass/screen.sass */ +/* line 272, ../sass/screen.sass */ a, a:visited { color: #ff8000 !important; } - /* line 272, ../sass/screen.sass */ + /* line 275, ../sass/screen.sass */ a:hover, a:visited:hover { text-decoration: none; } -/* line 276, ../sass/screen.sass */ -.archive div { +/* line 279, ../sass/screen.sass */ +.archive dl { float: left; display: block; margin-right: 2.35765%; width: 31.76157%; clear: right; } /* line 38, ../sass/neat/grid/_span-columns.scss */ - .archive div:last-child { + .archive dl:last-child { margin-right: 0; } /* line 52, ../sass/neat/grid/_omega.scss */ - .archive div:nth-child(3) { + .archive dl:nth-child(3) { margin-right: 0; } /* line 57, ../sass/neat/grid/_omega.scss */ - .archive div:nth-child(3+1) { + .archive dl:nth-child(3+1) { clear: left; } -/* line 282, ../sass/screen.sass */ +/* line 285, ../sass/screen.sass */ #sharing ul { display: block; float: right; } @@ -1749,35 +1752,45 @@ a, a:visited { content: ""; display: table; clear: both; } -/* line 288, ../sass/screen.sass */ +/* line 291, ../sass/screen.sass */ #sharing li { font-size: 1em; display: block; margin: 0.5em; float: left; } -/* line 296, ../sass/screen.sass */ +/* line 299, ../sass/screen.sass */ [role="article"] .content ul > li, .archive ul > li, [role="contentinfo"] ul > li { list-style: disc inside !important; display: table-row; } - /* line 301, ../sass/screen.sass */ + /* line 304, ../sass/screen.sass */ [role="article"] .content ul > li:before, .archive ul > li:before, [role="contentinfo"] ul > li:before { content: "●"; display: table-cell; padding-right: 0.5em; } -/* line 306, ../sass/screen.sass */ +/* line 309, ../sass/screen.sass */ [role="article"] .content ol, .archive ol, [role="contentinfo"] ol { counter-reset: list; } -/* line 309, ../sass/screen.sass */ +/* line 312, ../sass/screen.sass */ [role="article"] .content ol > li, .archive ol > li, [role="contentinfo"] ol > li { list-style: disc inside !important; display: table-row; } - /* line 313, ../sass/screen.sass */ + /* line 316, ../sass/screen.sass */ [role="article"] .content ol > li:before, .archive ol > li:before, [role="contentinfo"] ol > li:before { counter-increment: list; content: counter(list) "."; display: table-cell; padding-right: 0.5em; } -/* line 319, ../sass/screen.sass */ -[role="article"] .content ul, .archive ul, [role="contentinfo"] ul { - margin: 1em; } +/* line 323, ../sass/screen.sass */ +[role="article"] .content dl dt, .archive dl dt, [role="contentinfo"] dl dt { + font-size: 1.5em; + margin-bottom: 1em; } +/* line 327, ../sass/screen.sass */ +[role="article"] .content dl dd, .archive dl dd, [role="contentinfo"] dl dd { + list-style: disc inside !important; + display: table-row; } + /* line 331, ../sass/screen.sass */ + [role="article"] .content dl dd:before, .archive dl dd:before, [role="contentinfo"] dl dd:before { + content: "●"; + display: table-cell; + padding-right: 0.5em; } diff --git a/nshipster.com/index.html b/nshipster.com/index.html index e933a34b..3dbdfb1a 100644 --- a/nshipster.com/index.html +++ b/nshipster.com/index.html @@ -65,20 +65,18 @@

    {{ post.title | camel_break }}Archive

    {% for group in site.groups %} -
    -

    {{ group }}

    -
      - {% assign sorted = site.posts | sort: 'title' %} - {% for post in sorted %} - {% if post.category == group %} -
    • {{ post.title }}
    • - {% elsif group == 'Miscellanea' %} - {% unless site.groups contains post.category %} -
    • {{ post.title }}
    • - {% endunless %} - {% endif %} - {% endfor %} -
    -
    +
    +
    {{ group }}
    + {% assign sorted = site.posts | sort: 'title' %} + {% for post in sorted %} + {% if post.category == group %} +
    {{ post.title }}
    + {% elsif group == 'Miscellanea' %} + {% unless site.groups contains post.category %} +
    {{ post.title }}
    + {% endunless %} + {% endif %} + {% endfor %} +
    {% endfor %} From 391d170a44a757580960b28417cc9f8832400bbb Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Mon, 14 Jul 2014 20:49:21 -0700 Subject: [PATCH 0368/1324] Fixing category list --- nshipster.com/_layouts/default.html | 2 +- nshipster.com/_posts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 1f0a7303..72f7d3cb 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -125,7 +125,7 @@

    {{ group }}

    {% if post.category == group %}
  • {{ post.title }}
  • {% elsif group == 'Miscellanea' %} - {% unless site.groups contains post.framework %} + {% unless site.groups contains post.category %}
  • {{ post.title }}
  • {% endunless %} {% endif %} diff --git a/nshipster.com/_posts b/nshipster.com/_posts index 6d176028..f2ab2d28 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit 6d176028f16efb39f2b4c3e6562f5441062912ce +Subproject commit f2ab2d28201f49019256be2cdec0ae34dc3ac7ce From 0177d533e78433d76aea4fe23b83056b8d320a3c Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 15 Jul 2014 07:31:27 -0700 Subject: [PATCH 0369/1324] Stashing --- assets/sass/_pygments.sass | 2 - assets/sass/_typography.sass | 124 ------------------- assets/sass/screen.sass | 43 ++++--- nshipster.com/_layouts/post.html | 24 +++- nshipster.com/_posts | 2 +- nshipster.com/css/screen.css | 202 +++++++++++++++++-------------- 6 files changed, 157 insertions(+), 240 deletions(-) diff --git a/assets/sass/_pygments.sass b/assets/sass/_pygments.sass index cf3cd705..d14ae783 100644 --- a/assets/sass/_pygments.sass +++ b/assets/sass/_pygments.sass @@ -7,7 +7,6 @@ .c color: #93a1a1 - font-style: italic .g color: #d33682 .k @@ -18,7 +17,6 @@ color: #268bd2 .cm, .cp, .c1, .cs color: #93a1a1 - font-style: italic .gd, .ge, .gr, .gh, .gi, .go, .gp, .gs, .gu, .gt color: #d33682 .kc diff --git a/assets/sass/_typography.sass b/assets/sass/_typography.sass index 618e31f8..0bacaaec 100644 --- a/assets/sass/_typography.sass +++ b/assets/sass/_typography.sass @@ -1,127 +1,3 @@ -html body - font-size: 87% - font-family: "Avenir Next", "Avenir", "Helvetica Neue", "Helvetica", sans-serif - +text-shadow(0 1px 1px #eee) - color: $text-color !important - - ::selection, ::-moz-selection - +text-shadow(0 1px 1px #222) - background: transparentize($secondary-color, 0.5) - color: white - - strong - font-weight: 600 - - a, a:visited - color: $primary-color !important - - &:hover - text-decoration: none - -h1, h2, h3, h4 - a - text-decoration: none - -article - header - margin-bottom: 1em - - h1 - margin-bottom: 0.25em - h2 - margin-top: 0.25em - font-size: 1em - font-weight: 500 - font-style: italic - opacity: 0.5 - - h3 - font-size: 0.75em - font-weight: 500 - opacity: 0.5 - - h1 - font-weight: 700 - font-style: italic - font-size: 3em - - h2, h3 - margin-top: 1.5em - - h4 - border-bottom: 1px #eee solid - padding-bottom: 0.25em - - p, blockquote, ul, ol - code - color: $secondary-color - - h2, h3, h4 - code - color: lighten($text-color, 30%) - - figure, object, p > img - display: block - margin: 1em auto - - ul - li - margin-bottom: 1em - - ol - li - margin-left: 2em - -[role="main"] > article, section#latest article - font-size: 150% - - header - small - font-style: italic - display: block - - h1 - margin-top: 0.25em - -.highlight - padding: 0 20px - background-color: $border-color - +border-radius(10px) - text-shadow: none !important - - pre - margin-top: 0 !important - code - +border-radius(5px) - font-size: 83% - display: block - white-space: pre-wrap - padding: +span(1) / 2 - - -table - border-spacing: 0 - border-collapse: collapse - margin: 1em 0 - - caption - display: none - - thead th - background: transparent - border-bottom: 1px $border-color solid - padding-top: 2em - - tfoot td - border-top: 1px $border-color solid - font-size: 75% - padding-top: 1em - -hr - border: none - border-bottom: 1px $border-color solid - margin: 2em 0 - #type-encodings, #method-encodings tr > td:first-child width: 12em diff --git a/assets/sass/screen.sass b/assets/sass/screen.sass index ce318c36..8d8091f8 100644 --- a/assets/sass/screen.sass +++ b/assets/sass/screen.sass @@ -19,7 +19,7 @@ $mobile: new-breakpoint(max-width 480px 4) html, body // font-family: "Avenir Next", "Avenir", "Helvetica Neue", "Helvetica", sans-serif !important - //font-family: "Gill Sans" + font-family: 'Georgia Pro', Georgia, georgia, serif margin: 0 border-top: 3px $primary-color solid background: $background-color @@ -178,20 +178,34 @@ section h1, h2, h3, h4, h5 margin: 2em 0 1em 0 - hr - width: 40% - margin: 2em auto + hr + width: 40% + margin: 2em auto - img - margin: 1em auto - display: block - width: auto + img + margin: 1em auto + display: block + width: auto - figure - text-align: center + ul, ol + margin: 1.5em 0 + padding: 0 3em + + li + list-style: disc + margin-bottom: 1em - blockquote - border-left: 3px $primary-color solid + figure + text-align: center + + blockquote + border-left: 3px $primary-color solid + + table + th + text-align: center + td + padding: 1em footer .contributor @@ -295,12 +309,11 @@ a, a:visited float: left -[role="article"] .content, .archive, [role="contentinfo"] +.archive, [role="contentinfo"] ul > li list-style: disc inside !important display: table-row - &:before content: "●" display: table-cell @@ -320,6 +333,8 @@ a, a:visited padding-right: 0.5em dl + padding: 0 0.5em + dt font-size: 1.5em margin-bottom: 1em diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index bce33cb8..bb718724 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -2,10 +2,13 @@ layout: default --- +{% assign author = site.data.authors.mattt %} + + + {% assign related = site.related_articles %} + {% if page.category %} + {% assign category = page.category | downcase %} + {% assign related = site.categories[category] %} + {% endif %} + + {% if related.length != 1 %} + + + {% endif %} + +

    {{ site.description }}

    diff --git a/nshipster.com/_posts b/nshipster.com/_posts index 46ad5ce5..a50f5a3a 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit 46ad5ce535e05313672fa000a44a414ae497c212 +Subproject commit a50f5a3ab97a72ce432037f71fb138b992b77eb3 diff --git a/nshipster.com/css/screen.css b/nshipster.com/css/screen.css index c7ff0b70..fd8b4c95 100644 --- a/nshipster.com/css/screen.css +++ b/nshipster.com/css/screen.css @@ -365,100 +365,98 @@ input[type="submit"] { /* line 10, ../sass/_animations.sass */ 80%, 100% { -webkit-transform: skewX(0); } } -/* line 1, ../sass/_pygments.sass */ +/* line 1, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight { background-color: #e5e5e5; color: #586e75; } - /* line 2, ../sass/_pygments.sass */ + /* line 2, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .hll { background-color: #e5e5e5; } - /* line 8, ../sass/_pygments.sass */ + /* line 8, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .c { - color: #93a1a1; - font-style: italic; } - /* line 11, ../sass/_pygments.sass */ + color: #93a1a1; } + /* line 10, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .g { color: #d33682; } - /* line 13, ../sass/_pygments.sass */ + /* line 12, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .k { color: #859900; } - /* line 15, ../sass/_pygments.sass */ + /* line 14, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .l { color: #2aa198; } - /* line 17, ../sass/_pygments.sass */ + /* line 16, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .n { color: #268bd2; } - /* line 19, ../sass/_pygments.sass */ + /* line 18, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .cm, .highlight .cp, .highlight .c1, .highlight .cs { - color: #93a1a1; - font-style: italic; } - /* line 22, ../sass/_pygments.sass */ + color: #93a1a1; } + /* line 20, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .gd, .highlight .ge, .highlight .gr, .highlight .gh, .highlight .gi, .highlight .go, .highlight .gp, .highlight .gs, .highlight .gu, .highlight .gt { color: #d33682; } - /* line 24, ../sass/_pygments.sass */ + /* line 22, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .kc { color: #859900; font-weight: bold; } - /* line 27, ../sass/_pygments.sass */ + /* line 25, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .kd { color: #859900; } - /* line 29, ../sass/_pygments.sass */ + /* line 27, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .kn { color: #dc322f; font-weight: bold; } - /* line 32, ../sass/_pygments.sass */ + /* line 30, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .kp, .highlight .kr { color: #859900; } - /* line 34, ../sass/_pygments.sass */ + /* line 32, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .kt { color: #859900; font-weight: bold; } - /* line 37, ../sass/_pygments.sass */ + /* line 35, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .ld { color: #2aa198; } - /* line 39, ../sass/_pygments.sass */ + /* line 37, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .m { color: #2aa198; font-weight: bold; } - /* line 42, ../sass/_pygments.sass */ + /* line 40, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .s { color: #2aa198; } - /* line 44, ../sass/_pygments.sass */ + /* line 42, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .na { color: #268bd2; } - /* line 46, ../sass/_pygments.sass */ + /* line 44, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .nb, .highlight .nc { color: #cb4b16; } - /* line 48, ../sass/_pygments.sass */ + /* line 46, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .no, .highlight .nd, .highlight .ni, .highlight .ne, .highlight .nf, .highlight .nl, .highlight .nn, .highlight .nx, .highlight .py { color: #268bd2; } - /* line 50, ../sass/_pygments.sass */ + /* line 48, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .nt { color: #268bd2; font-weight: bold; } - /* line 53, ../sass/_pygments.sass */ + /* line 51, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .nv { color: #268bd2; } - /* line 55, ../sass/_pygments.sass */ + /* line 53, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .ow { color: #859900; } - /* line 57, ../sass/_pygments.sass */ + /* line 55, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .w { color: #586e75; } - /* line 59, ../sass/_pygments.sass */ + /* line 57, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .mf, .highlight .mh, .highlight .mi, .highlight .mo { color: #2aa198; font-weight: bold; } - /* line 62, ../sass/_pygments.sass */ + /* line 60, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx, .highlight .sr, .highlight .s1, .highlight .ss { color: #2aa198; } - /* line 64, ../sass/_pygments.sass */ + /* line 62, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .bp { color: #cb4b16; } - /* line 66, ../sass/_pygments.sass */ + /* line 64, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .vc, .highlight .vg, .highlight .vi { color: #268bd2; } - /* line 68, ../sass/_pygments.sass */ + /* line 66, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight .il { color: #2aa198; font-weight: bold; } @@ -1335,6 +1333,7 @@ form input.st-search-input { /* line 20, ../sass/screen.sass */ html, body { + font-family: "Georgia Pro", Georgia, georgia, serif; margin: 0; border-top: 3px #ff8000 solid; background: #f8f7f5; } @@ -1581,22 +1580,36 @@ section h1 { /* line 178, ../sass/screen.sass */ [role="article"] .content h1, [role="article"] .content h2, [role="article"] .content h3, [role="article"] .content h4, [role="article"] .content h5 { margin: 2em 0 1em 0; } - /* line 181, ../sass/screen.sass */ - [role="article"] hr { - width: 40%; - margin: 2em auto; } - /* line 185, ../sass/screen.sass */ - [role="article"] img { - margin: 1em auto; - display: block; - width: auto; } - /* line 190, ../sass/screen.sass */ - [role="article"] figure { - text-align: center; } - /* line 193, ../sass/screen.sass */ - [role="article"] blockquote { - border-left: 3px #ff8000 solid; } - /* line 197, ../sass/screen.sass */ + /* line 181, ../sass/screen.sass */ + [role="article"] .content hr { + width: 40%; + margin: 2em auto; } + /* line 185, ../sass/screen.sass */ + [role="article"] .content img { + margin: 1em auto; + display: block; + width: auto; } + /* line 190, ../sass/screen.sass */ + [role="article"] .content ul, [role="article"] .content ol { + margin: 1.5em 0; + padding: 0 3em; } + /* line 194, ../sass/screen.sass */ + [role="article"] .content ul li, [role="article"] .content ol li { + list-style: disc; + margin-bottom: 1em; } + /* line 198, ../sass/screen.sass */ + [role="article"] .content figure { + text-align: center; } + /* line 201, ../sass/screen.sass */ + [role="article"] .content blockquote { + border-left: 3px #ff8000 solid; } + /* line 205, ../sass/screen.sass */ + [role="article"] .content table th { + text-align: center; } + /* line 207, ../sass/screen.sass */ + [role="article"] .content table td { + padding: 1em; } + /* line 211, ../sass/screen.sass */ [role="article"] footer .contributor { float: left; display: block; @@ -1613,24 +1626,24 @@ section h1 { /* line 57, ../sass/neat/grid/_omega.scss */ [role="article"] footer .contributor:nth-child(2n+1) { clear: left; } - /* line 203, ../sass/screen.sass */ + /* line 217, ../sass/screen.sass */ [role="article"] footer .contributor:only-child { width: 100%; } - /* line 206, ../sass/screen.sass */ + /* line 220, ../sass/screen.sass */ [role="article"] footer .contributor:only-child .avatar { padding: 0 1em; } @media screen and (max-width: 480px) { - /* line 197, ../sass/screen.sass */ + /* line 211, ../sass/screen.sass */ [role="article"] footer .contributor { width: 100%; margin-bottom: 1em; } - /* line 213, ../sass/screen.sass */ + /* line 227, ../sass/screen.sass */ [role="article"] footer .contributor:not(:first-child) { border-top: none; } - /* line 216, ../sass/screen.sass */ + /* line 230, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { padding: 0; } } - /* line 219, ../sass/screen.sass */ + /* line 233, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { float: left; display: block; @@ -1639,7 +1652,7 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .avatar:last-child { margin-right: 0; } - /* line 222, ../sass/screen.sass */ + /* line 236, ../sass/screen.sass */ [role="article"] footer .contributor .details { float: left; display: block; @@ -1650,14 +1663,14 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .details:last-child { margin-right: 0; } - /* line 227, ../sass/screen.sass */ + /* line 241, ../sass/screen.sass */ [role="article"] footer .contributor .details span { font-weight: 700; } - /* line 230, ../sass/screen.sass */ + /* line 244, ../sass/screen.sass */ [role="article"] footer .contributor .details p { font-size: 0.75em; margin-top: 1em; } - /* line 234, ../sass/screen.sass */ + /* line 248, ../sass/screen.sass */ [role="article"] footer small { display: block; font-size: 1em; @@ -1666,7 +1679,7 @@ section h1 { text-transform: lowercase; font-variant: small-caps; margin-bottom: 1em; } - /* line 243, ../sass/screen.sass */ + /* line 257, ../sass/screen.sass */ [role="article"] footer [role="navigation"] { display: block; } /* line 15, ../sass/bourbon/addons/_clearfix.scss */ @@ -1674,7 +1687,7 @@ section h1 { content: ""; display: table; clear: both; } - /* line 246, ../sass/screen.sass */ + /* line 260, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #continue { float: left; display: block; @@ -1683,7 +1696,7 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer [role="navigation"] #continue:last-child { margin-right: 0; } - /* line 249, ../sass/screen.sass */ + /* line 263, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #related { float: left; display: block; @@ -1694,13 +1707,13 @@ section h1 { [role="article"] footer [role="navigation"] #related:last-child { margin-right: 0; } -/* line 253, ../sass/screen.sass */ +/* line 267, ../sass/screen.sass */ [role="contentinfo"] { text-align: center; margin-top: 2em; padding: 1em; } -/* line 258, ../sass/screen.sass */ +/* line 272, ../sass/screen.sass */ .avatar { -webkit-touch-callout: none; -webkit-user-select: none; @@ -1714,19 +1727,19 @@ section h1 { pointer-events: none; user-select: none; } -/* line 268, ../sass/screen.sass */ +/* line 282, ../sass/screen.sass */ html ::selection, html ::-moz-selection, body ::selection, body ::-moz-selection { background: rgba(76, 49, 80, 0.5); color: white; } -/* line 272, ../sass/screen.sass */ +/* line 286, ../sass/screen.sass */ a, a:visited { color: #ff8000 !important; } - /* line 275, ../sass/screen.sass */ + /* line 289, ../sass/screen.sass */ a:hover, a:visited:hover { text-decoration: none; } -/* line 279, ../sass/screen.sass */ +/* line 293, ../sass/screen.sass */ .archive dl { float: left; display: block; @@ -1743,7 +1756,7 @@ a, a:visited { .archive dl:nth-child(3+1) { clear: left; } -/* line 285, ../sass/screen.sass */ +/* line 299, ../sass/screen.sass */ #sharing ul { display: block; float: right; } @@ -1752,45 +1765,48 @@ a, a:visited { content: ""; display: table; clear: both; } -/* line 291, ../sass/screen.sass */ +/* line 305, ../sass/screen.sass */ #sharing li { font-size: 1em; display: block; margin: 0.5em; float: left; } -/* line 299, ../sass/screen.sass */ -[role="article"] .content ul > li, .archive ul > li, [role="contentinfo"] ul > li { +/* line 313, ../sass/screen.sass */ +.archive ul > li, [role="contentinfo"] ul > li { list-style: disc inside !important; display: table-row; } - /* line 304, ../sass/screen.sass */ - [role="article"] .content ul > li:before, .archive ul > li:before, [role="contentinfo"] ul > li:before { + /* line 317, ../sass/screen.sass */ + .archive ul > li:before, [role="contentinfo"] ul > li:before { content: "●"; display: table-cell; padding-right: 0.5em; } -/* line 309, ../sass/screen.sass */ -[role="article"] .content ol, .archive ol, [role="contentinfo"] ol { +/* line 322, ../sass/screen.sass */ +.archive ol, [role="contentinfo"] ol { counter-reset: list; } -/* line 312, ../sass/screen.sass */ -[role="article"] .content ol > li, .archive ol > li, [role="contentinfo"] ol > li { +/* line 325, ../sass/screen.sass */ +.archive ol > li, [role="contentinfo"] ol > li { list-style: disc inside !important; display: table-row; } - /* line 316, ../sass/screen.sass */ - [role="article"] .content ol > li:before, .archive ol > li:before, [role="contentinfo"] ol > li:before { + /* line 329, ../sass/screen.sass */ + .archive ol > li:before, [role="contentinfo"] ol > li:before { counter-increment: list; content: counter(list) "."; display: table-cell; padding-right: 0.5em; } -/* line 323, ../sass/screen.sass */ -[role="article"] .content dl dt, .archive dl dt, [role="contentinfo"] dl dt { - font-size: 1.5em; - margin-bottom: 1em; } -/* line 327, ../sass/screen.sass */ -[role="article"] .content dl dd, .archive dl dd, [role="contentinfo"] dl dd { - list-style: disc inside !important; - display: table-row; } - /* line 331, ../sass/screen.sass */ - [role="article"] .content dl dd:before, .archive dl dd:before, [role="contentinfo"] dl dd:before { - content: "●"; - display: table-cell; - padding-right: 0.5em; } +/* line 335, ../sass/screen.sass */ +.archive dl, [role="contentinfo"] dl { + padding: 0 0.5em; } + /* line 338, ../sass/screen.sass */ + .archive dl dt, [role="contentinfo"] dl dt { + font-size: 1.5em; + margin-bottom: 1em; } + /* line 342, ../sass/screen.sass */ + .archive dl dd, [role="contentinfo"] dl dd { + list-style: disc inside !important; + display: table-row; } + /* line 346, ../sass/screen.sass */ + .archive dl dd:before, [role="contentinfo"] dl dd:before { + content: "●"; + display: table-cell; + padding-right: 0.5em; } From f7fecf7cc853b34c21dff6da6605b5e90bf65939 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Tue, 15 Jul 2014 12:58:58 -0700 Subject: [PATCH 0370/1324] Stashing --- Gemfile | 2 +- Gemfile.lock | 37 +-- assets/sass/_animations.sass | 16 +- assets/sass/_colors.sass | 8 - assets/sass/_exceptions.sass | 54 +++ assets/sass/_layout.sass | 92 ------ assets/sass/_mobile.sass | 138 -------- assets/sass/_promotion.sass | 71 ---- assets/sass/_typography.sass | 35 -- assets/sass/screen.sass | 219 +++++++++++-- nshipster.com/_data/authors.yml | 2 +- nshipster.com/_data/books.yml | 18 +- nshipster.com/_includes/logo.svg | 4 +- nshipster.com/_includes/mustache.svg | 7 + nshipster.com/_includes/ns.svg | 10 + nshipster.com/_layouts/default.html | 30 +- nshipster.com/_layouts/post.html | 15 +- nshipster.com/articles/index.html | 6 +- nshipster.com/books/index.html | 4 +- nshipster.com/css/screen.css | 474 ++++++++++++++++++++------- nshipster.com/index.html | 23 +- 21 files changed, 692 insertions(+), 573 deletions(-) delete mode 100644 assets/sass/_colors.sass create mode 100644 assets/sass/_exceptions.sass delete mode 100644 assets/sass/_layout.sass delete mode 100644 assets/sass/_mobile.sass delete mode 100644 assets/sass/_promotion.sass delete mode 100644 assets/sass/_typography.sass create mode 100644 nshipster.com/_includes/mustache.svg create mode 100644 nshipster.com/_includes/ns.svg diff --git a/Gemfile b/Gemfile index 0d19ed55..1f47deca 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,7 @@ ruby '2.0.0' source "https://rubygems.org" -gem 'jekyll', git: 'git@github.com:jekyll/jekyll.git' +gem 'jekyll' gem 'jekyll-contentblocks' gem 'nokogiri' diff --git a/Gemfile.lock b/Gemfile.lock index 8d870499..b6eacb7e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,23 +1,3 @@ -GIT - remote: git@github.com:jekyll/jekyll.git - revision: e8e245e20f5f3647707411f1300e0c9b8bcc6b6b - specs: - jekyll (2.1.0) - classifier (~> 1.3) - colorator (~> 0.1) - jekyll-coffeescript (~> 1.0) - jekyll-gist (~> 1.0) - jekyll-paginate (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.0) - kramdown (~> 1.3) - liquid (~> 2.6.1) - mercenary (~> 0.3.3) - pygments.rb (~> 0.6.0) - redcarpet (~> 3.1) - safe_yaml (~> 1.0) - toml (~> 0.1.0) - GEM remote: https://rubygems.org/ specs: @@ -41,6 +21,21 @@ GEM execjs (2.2.1) fast-stemmer (1.0.2) ffi (1.9.3) + jekyll (2.1.0) + classifier (~> 1.3) + colorator (~> 0.1) + jekyll-coffeescript (~> 1.0) + jekyll-gist (~> 1.0) + jekyll-paginate (~> 1.0) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 1.0) + kramdown (~> 1.3) + liquid (~> 2.6.1) + mercenary (~> 0.3.3) + pygments.rb (~> 0.6.0) + redcarpet (~> 3.1) + safe_yaml (~> 1.0) + toml (~> 0.1.0) jekyll-coffeescript (1.0.0) coffee-script (~> 2.2) jekyll-contentblocks (0.0.2) @@ -89,7 +84,7 @@ PLATFORMS DEPENDENCIES bitters bourbon - jekyll! + jekyll jekyll-contentblocks neat nokogiri diff --git a/assets/sass/_animations.sass b/assets/sass/_animations.sass index 5fb80743..04a06c10 100644 --- a/assets/sass/_animations.sass +++ b/assets/sass/_animations.sass @@ -1,11 +1,11 @@ @-webkit-keyframes twirl 0% - -webkit-transform: skewX(0) + -webkit-transform: scale(1) 10%, 20% - -webkit-transform: skewX(-3deg) - 30%, 50%, 70% - -webkit-transform: skewX(3deg) - 40%, 60% - -webkit-transform: skewX(-3deg) - 80%, 100% - -webkit-transform: skewX(0) + -webkit-transform: scale(0.9) rotate(-3deg) + 30%, 50%, 70%, 90% + -webkit-transform: scale(1.1) rotate(3deg) + 40%, 60%, 80% + -webkit-transform: scale(1.1) rotate(-3deg) + 100% + -webkit-transform: scale(1) rotate(0) diff --git a/assets/sass/_colors.sass b/assets/sass/_colors.sass deleted file mode 100644 index c7f2aa69..00000000 --- a/assets/sass/_colors.sass +++ /dev/null @@ -1,8 +0,0 @@ -$primary-color: #ff8000 -$secondary-color: #4c3150 -$tertiary-color: #dfaf25 - -$text-color: #222220 -$background-color: #F8F7F5 -$link-color: $primary-color -$border-color: #e9e9e9 diff --git a/assets/sass/_exceptions.sass b/assets/sass/_exceptions.sass new file mode 100644 index 00000000..28e2f57e --- /dev/null +++ b/assets/sass/_exceptions.sass @@ -0,0 +1,54 @@ + + +#type-encodings, #method-encodings + tr > td:first-child + width: 12em + padding-left: 3em + +#gpuimage + table + +media($mobile) + font-size: 50% + + #gpuimage-benchmarks + td + text-align: center + + td:first-child + text-align: left + + td:last-child + text-align: right + + #gpuimage-filters + td + vertical-align: top + font-size: 75% + blockquote + font-size: 75% + +table.core-data-versus-nskeyedarchiver + td + text-align: center + + td:first-child + text-align: left + font-weight: bold + +table#xcode-key-bindings-modifiers + width: 100% + + td, th + width: 20% + text-align: center + +#cfstringtransform + table + display: block + + td:first-child + width: 60% + +#icloud + header time + background-color: transparentize($primary-color, 0.8) diff --git a/assets/sass/_layout.sass b/assets/sass/_layout.sass deleted file mode 100644 index 89a80605..00000000 --- a/assets/sass/_layout.sass +++ /dev/null @@ -1,92 +0,0 @@ -html body - padding: 3em 10px - -[role="container"] - +container - - & > header - +clearfix - margin-bottom: 3em - - h1 - +column(6) - - h2 - clear: both - float: left - -article - header - margin-bottom: 2em - - table - display: block - overflow: scroll - - div.highlight - overflow: scroll - margin: 0 0 1.5em - - pre - margin: 1.5em 0 0 0 - -#archive - +clearfix - padding-top: 3em - - article - +column(11) - +append(2) - clear: left - margin-bottom: 2em - padding-bottom: 1em - - &:nth-child(even) - +column(11, true) - clear: right - padding-right: 0 - - h1 - font-size: 2em - -footer - clear: both - border-top: 1px $border-color solid - margin-top: 1em - padding-top: 3em - - section.archive - div - +column(8) - - &:nth-of-type(2n + 3) - +column(8, true) - small - margin-left: 1.6em - - section.colophon - +column(20) - - aside - +column(4, true) - float: right - text-align: right - - a - font-size: 2em - margin-left: 0.5em - text-decoration: none - -figure - figcaption - display: none - -.st-input-powered-by - display: none !important - -header form - margin-top: 1.5em - -#st-search-input - float: right - clear: right diff --git a/assets/sass/_mobile.sass b/assets/sass/_mobile.sass deleted file mode 100644 index 4c116013..00000000 --- a/assets/sass/_mobile.sass +++ /dev/null @@ -1,138 +0,0 @@ -@media (max-width:480px) - html body - padding: 0 - margin: 0 - - [role="container"] - width: 100% - - & > header - margin-top: 1em - padding: 10px 20px - - a - display: block - width: 100% - - #logo - width: 100% - text-align: center - margin: 0 - h2 - width: 100% - text-align: center - - #moustache - width: 100% - position: absolute - display: block - margin-left: 0 !important - margin-top: -140px - - .readmore - display: none - - #latest, #archive - article p - margin-bottom: 0 !important - padding-bottom: 0 - - #latest - p - font-size: 0.85em - - #archive - article - width: 94% - - header h1 - width: 96% - - article - padding: 0.5em 10px - - header - padding-bottom: 10px - - h2 - font-size: 0.75em - - h1 - font-size: 1.5em - - h2 - font-size: 1.5em - - h3 - font-size: 1.25em - - blockquote - padding: 0 - margin: 0 - - img - max-width: 100% - - ul, ol - margin: 10px - padding: 10px - - code - padding: 1.5em 1px - font-size: 0.75em - - table - width: 100% - overflow: scroll - - aside - display: none - - .credits - width: 100% - text-align: center - - footer - width: 100% - - div - width: 100% !important - - h2 - padding: 0 10px - font-size: 1.5em - - ul - padding: 0 - margin: 0 - border-top: 1px #ccc solid - - li - list-style: none - - border-bottom: 1px #ccc solid - - &:hover - background: #fff - - a - display: block - text-decoration: none - padding: 1em 10px - - .promotion - #cover, #cfhipsterref-cover - float: none !important - margin: 2em auto !important - display: block !important - - button - display: block - width: 100% - text-align: center - - table#notification-center-coupling - font-size: 50% - - form - display: none diff --git a/assets/sass/_promotion.sass b/assets/sass/_promotion.sass deleted file mode 100644 index b4f2b177..00000000 --- a/assets/sass/_promotion.sass +++ /dev/null @@ -1,71 +0,0 @@ -.promotion - +clearfix - - padding-bottom: 1em - - .cover - +box-shadow(0px 3px 10px #d6d6d6) - display: block - width: 150px !important - height: 200px !important - float: left - margin-right: 40px - border: 1px #ccc solid - background-size: 150px 200px - background-repeat: no-repeat - - #the-nshipster-fake-book-cover - background-image: url('//cdn.nshipster.com/images/the-nshipster-fake-book-cover.png') - - @media (-webkit-min-device-pixel-ratio:2) - #the-nshipster-fake-book-cover - background-image: url('//cdn.nshipster.com/images/the-nshipster-fake-book-cover@2x.png') - - #cfhipsterref-cover - background-image: url('//cdn.nshipster.com/images/cfhipsterref-cover.png') - - @media (-webkit-min-device-pixel-ratio:2) - #cfhipsterref-cover - background-image: url('//cdn.nshipster.com/images/cfhipsterref-cover@2x.png') - - div - +column(18) - - h1 - font-size: 1.25em - margin: 0 - - h2 - font-size: 1em - color: #999 - font-style: italic - margin-top: 0 - - p - margin-bottom: 20px - -button - +border-radius(5px) - background-color: transparent - display: block - vertical-align: middle - border: 2px solid $primary-color - height: 32px - line-height: 32px - padding: 0.2em 1em 0.2em 1em - font-weight: 300 - font-size: 1em - font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif - color: $primary-color - margin: 0 - line-height: 1.1em - text-decoration: none - text-align: center - cursor: pointer - &:hover - background-color: #fff - &:active - background: #eeeeee - color: #bbbbbb - &:focus - outline: none diff --git a/assets/sass/_typography.sass b/assets/sass/_typography.sass deleted file mode 100644 index 0bacaaec..00000000 --- a/assets/sass/_typography.sass +++ /dev/null @@ -1,35 +0,0 @@ -#type-encodings, #method-encodings - tr > td:first-child - width: 12em - padding-left: 3em - -#gpuimage-benchmarks - td - text-align: center - - td:first-child - text-align: left - - td:last-child - text-align: right - -#gpuimage-filters - td - vertical-align: top - font-size: 75% - -table.core-data-versus-nskeyedarchiver - td - text-align: center - - td:first-child - text-align: left - font-weight: bold - -table#xcode-key-bindings-modifiers - width: 100% - - td, th - width: 20% - text-align: center - diff --git a/assets/sass/screen.sass b/assets/sass/screen.sass index 8d8091f8..dfe51562 100644 --- a/assets/sass/screen.sass +++ b/assets/sass/screen.sass @@ -2,24 +2,39 @@ @import './neat/neat' @import './base/base' -@import "./colors" -@import "./functions" -@import "./fonts" -@import "./animations" -@import "./pygments" -@import "./swiftype" +$primary-color: #ff8000 +$secondary-color: #4c3150 +$tertiary-color: #dfaf25 + +$text-color: #222220 +$background-color: #F8F7F5 +$link-color: $primary-color +$border-color: #e9e9e9 $visual-grid: true $grid-columns: 12 $max-width: 100% +$desktop: new-breakpoint(min-width 769px 12) $tablet: new-breakpoint(max-width 768px 8) $mobile: new-breakpoint(max-width 480px 4) +$sans-serif-font-family: "Helvetica Neue", "Helvetica", sans-serif +$serif-font-family: "Georgia Pro", Georgia, serif + + + +@import "./functions" +@import "./fonts" +@import "./animations" +@import "./pygments" +@import "./swiftype" +@import "./exceptions" + + html, body - // font-family: "Avenir Next", "Avenir", "Helvetica Neue", "Helvetica", sans-serif !important - font-family: 'Georgia Pro', Georgia, georgia, serif + font-family: $serif-font-family margin: 0 border-top: 3px $primary-color solid background: $background-color @@ -46,24 +61,38 @@ html, body +span-columns(3 of 12) +prevent-selection font-size: 1em - max-height: 7.5em + position: relative + height: 6em + + +media($tablet) + margin-bottom: 2em + height: 5em + + a + display: block svg width: 70% +media($tablet) - width: 100% + width: 100% !important - .mustache - transform-origin: center center !important - -webkit-transform: skewX(0) - z-index: 1000 - position: absolute + &#ns + position: absolute + width: 70% + top: 0 + left: 0 - &:hover .mustache - +animation(twirl 1s ease-in-out) + &#mustache + position: absolute + width: 70% + z-index: 100 + top: 0 + + &:hover + +animation(twirl 1s ease-in-out) nav - +span-columns(6 of 12) + +span-columns(5 of 12) li display: block @@ -74,9 +103,21 @@ html, body display: block text-align: center + padding-top: 14px + + &.current + padding-top: 10px + border-top: 4px $primary-color solid + + &:hover + padding-top: 10px + border-top: 4px lighten($primary-color, 25%) solid + form +span-columns(3 of 12) + +shift(1) +omega + float: right input height: 2.5em @@ -106,8 +147,9 @@ html, body +span-columns(4 of 12) min-height: 15em - &:nth-of-type(3n) - +omega + +media($desktop) + &:nth-of-type(3n) + +omega +media($tablet) +span-columns(6 of 12) @@ -154,6 +196,11 @@ section table overflow: scroll + margin: 2em 0 + + caption + margin: 2em 0 1em 0 + font-size: 1.5em div.highlight border-radius: 0.25em @@ -171,6 +218,14 @@ section margin-bottom: 0.5em h2 font-size: 1.25em + font-family: $serif-font-family + font-style: italic + font-weight: 300 + color: lighten($text-color, 50%) + + time + color: lighten($text-color, 25%) + white-space: nowrap .content margin-bottom: 2em @@ -182,7 +237,7 @@ section width: 40% margin: 2em auto - img + img, object, embed, figure, svg margin: 1em auto display: block width: auto @@ -198,15 +253,35 @@ section figure text-align: center + del + color: transparentize($text-color, 0.5) + + ins + background-color: transparentize($primary-color, 0.8) + text-decoration: none + blockquote + margin: 2em + margin-right: 4em border-left: 3px $primary-color solid + cite + margin-top: 1em + display: block + + +media($tablet) + margin: 1em 0 + table th text-align: center td padding: 1em + sup + font-size: 50% + margin-right: -0.5em + footer .contributor +span-columns(6 of 12) @@ -251,6 +326,7 @@ section font-weight: 700 color: #777 text-transform: lowercase + font-family: $sans-serif-font-family font-variant: small-caps margin-bottom: 1em @@ -260,10 +336,30 @@ section #continue +span-columns(9 of 12) + h1 + margin-bottom: 0.5em + + p + font-size: 0.75em + #related +span-columns(3 of 12) +omega + +media($mobile) + margin-top: 1em + + li + font-size: 0.75em + + +media($mobile) + font-size: 1em + + + #continue, #related + +media($mobile) + +fill-parent + [role="contentinfo"] text-align: center margin-top: 2em @@ -292,8 +388,10 @@ a, a:visited .archive dl +span-columns(4 of 12) - +omega(3) - clear: right + +omega + + +media($mobile) + +fill-parent #sharing ul @@ -301,15 +399,36 @@ a, a:visited display: block float: right + +media($mobile) + +fill-parent li - font-size: 1em + font-size: 1.5em display: block margin: 0.5em float: left + +media($mobile) + display: none !important // ! + margin: 0 + +span-columns(3 of 12) + +omega(4) + + a, i + display: block + margin: 0 auto + font-size: 1.25em + + a:hover + text-decoration: none + color: $secondary-color !important + + +section > h1 + + -.archive, [role="contentinfo"] +.archive, [role="contentinfo"], #related ul > li list-style: disc inside !important display: table-row @@ -347,3 +466,53 @@ a, a:visited content: "●" display: table-cell padding-right: 0.5em + +section > h1 + font-family: $serif-font-family + font-weight: 300 + font-style: italic + text-align: center + margin-bottom: 3em + font-size: 1.5em + + +article.excerpt + h1 + font-size: 1.5em + +a.readmore + font-style: italic + + &:after + content: " ⟩" + +.content, [role="contentinfo"], footer ul + a:hover + text-decoration: underline + +h1 a:hover + background: $primary-color + color: #FFFFFF !important + + +.book + +span-columns(4 of 12) + &:nth-of-type(3n) + +omega + + a + display: block + + + + img + display: block + margin: 0 auto + width: 200px + padding: 4px + + &:hover + padding: 0 + border: 4px $primary-color solid + + diff --git a/nshipster.com/_data/authors.yml b/nshipster.com/_data/authors.yml index c0f6382c..06b1d8d3 100644 --- a/nshipster.com/_data/authors.yml +++ b/nshipster.com/_data/authors.yml @@ -5,5 +5,5 @@ mattt: twitter: mattt github: mattt google: 106751358503565042647 - bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt), including [Postgres.app](http://postgresapp.com), [Helios](http://helios.io), & [Nomad](http://nomad-cli.com)." + bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt), including [Postgres.app](http://postgresapp.com), [ASCIIwwdc](http://asciiwwdc.com) and [Nomad](http://nomad-cli.com)." diff --git a/nshipster.com/_data/books.yml b/nshipster.com/_data/books.yml index 1c9784a2..3f110193 100644 --- a/nshipster.com/_data/books.yml +++ b/nshipster.com/_data/books.yml @@ -1,7 +1,7 @@ nshipster: title: "NSHipster: Obscure Topics in Cocoa & Objective-C" description: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." - image: "https://nshipster..." + image: "//cdn.nshipster.com/images/book-cover@2x.png" formats: ebook: isbn: 978-0-9912182-2-6 @@ -12,7 +12,7 @@ cfhipsterref: title: "CFHipsterRef: Low-Level Programming on iOS & Mac OS X" summary: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, _CFHipsterRef: Low-Level Programming on iOS & Mac OS X_ covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." description: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, CFHipsterRef: Low-Level Programming on iOS & Mac OS X covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." - image: "..." + image: "//cdn.nshipster.com/images/cfhipsterref-cover@2x.png" formats: pdf: price: 29.99 @@ -23,11 +23,19 @@ cfhipsterref: nshipster-fake-book-objective-c: title: "The NSHipster Fake Book (Objective-C)" summary: "Over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases. Without any needless explanation." - description: "" - image: "..." + description: "Fake books are an indispensable tool for jazz musicians. They contain the melody, rhythm, and chord changes for hundreds of standards, allowing a player to jump into any session cold, and 'fake it' through any tunes outside their repertoire. It's not sheet music, but rather the essence of tunes. + +> Cm11 B9 B♭m9 A♭13 G13 and trade fours with the tenor. + +Programmers aren't all that different. Once you get the fundamentals down, it's really just about memorizing the APIs. Sure, you could read the docs, but nothing compares to the excitement of tinkering with code. + +That's the idea behind The NSHipster Fake Book: expanding your repertoire through concise code samples, with minimal explanation. It's about letting concepts click as you discover new licks you'd never though to try. Just pick it up and start playing. + +In this book, you'll find over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases." + image: "//cdn.nshipster.com/images/the-nshipster-fake-book-cover@2x.png" formats: pdf: price: 19.99 isbn: ... - availability: pre_order + availability: in_stock url: https://gum.co/the-nshipster-fake-book diff --git a/nshipster.com/_includes/logo.svg b/nshipster.com/_includes/logo.svg index 16c7058f..61e54b13 100644 --- a/nshipster.com/_includes/logo.svg +++ b/nshipster.com/_includes/logo.svg @@ -1,6 +1,6 @@ - - + + + + + diff --git a/nshipster.com/_includes/ns.svg b/nshipster.com/_includes/ns.svg new file mode 100644 index 00000000..81e50d3e --- /dev/null +++ b/nshipster.com/_includes/ns.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 62ce0022..68002ede 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -13,7 +13,7 @@ {% endif %} - + @@ -64,28 +64,35 @@

    - {% include logo.svg %} - + {% include ns.svg %} + {% include mustache.svg %}

    + {% if false %} + {% endif %}
    - + {{ contentblock header }}
    @@ -102,7 +109,6 @@

    diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index bb718724..57bc8fd0 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -4,7 +4,7 @@ {% assign author = site.data.authors.mattt %} -
    +

    {{ page.title | camel_break }}

    @@ -19,16 +19,16 @@

    @@ -42,7 +42,6 @@

    - -

    {{ site.description }}

    diff --git a/nshipster.com/articles/index.html b/nshipster.com/articles/index.html index b8eb1e8e..dc31b4c3 100644 --- a/nshipster.com/articles/index.html +++ b/nshipster.com/articles/index.html @@ -1,11 +1,8 @@ --- layout: default -paginate: 25 +title: Articles --- -
    -

    Archive

    - {% for post in site.posts %} {% endfor %} -
    diff --git a/nshipster.com/books/index.html b/nshipster.com/books/index.html index 3b550359..3416a1f4 100644 --- a/nshipster.com/books/index.html +++ b/nshipster.com/books/index.html @@ -1,5 +1,6 @@ --- layout: default +title: Books --- {% for book in site.data.books %} @@ -14,7 +15,8 @@

    {{ content.title }}

    {{ content.subtitle }}

    {% endif %} -

    {{ content.description }}

    + + {{ content.description | markdownify }}
    {% endfor %} diff --git a/nshipster.com/css/screen.css b/nshipster.com/css/screen.css index fd8b4c95..ce4a5fe3 100644 --- a/nshipster.com/css/screen.css +++ b/nshipster.com/css/screen.css @@ -346,25 +346,25 @@ input[type="submit"] { content: "\e613"; } @-webkit-keyframes twirl { - /* line 2, ../sass/_animations.sass */ + /* line 2, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ 0% { - -webkit-transform: skewX(0); } + -webkit-transform: scale(1); } - /* line 4, ../sass/_animations.sass */ + /* line 4, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ 10%, 20% { - -webkit-transform: skewX(-3deg); } + -webkit-transform: scale(0.9) rotate(-3deg); } - /* line 6, ../sass/_animations.sass */ - 30%, 50%, 70% { - -webkit-transform: skewX(3deg); } + /* line 6, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ + 30%, 50%, 70%, 90% { + -webkit-transform: scale(1.1) rotate(3deg); } - /* line 8, ../sass/_animations.sass */ - 40%, 60% { - -webkit-transform: skewX(-3deg); } + /* line 8, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ + 40%, 60%, 80% { + -webkit-transform: scale(1.1) rotate(-3deg); } - /* line 10, ../sass/_animations.sass */ - 80%, 100% { - -webkit-transform: skewX(0); } } + /* line 10, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ + 100% { + -webkit-transform: scale(1) rotate(0); } } /* line 1, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ .highlight { background-color: #e5e5e5; @@ -1331,14 +1331,67 @@ form input.st-search-input { -o-animation-name: modalExit; animation-name: modalExit; } -/* line 20, ../sass/screen.sass */ +/* line 4, ../sass/_exceptions.sass */ +#type-encodings tr > td:first-child, #method-encodings tr > td:first-child { + width: 12em; + padding-left: 3em; } + +@media screen and (max-width: 480px) { + /* line 9, ../sass/_exceptions.sass */ + #gpuimage table { + font-size: 50%; } } +/* line 14, ../sass/_exceptions.sass */ +#gpuimage #gpuimage-benchmarks td { + text-align: center; } +/* line 17, ../sass/_exceptions.sass */ +#gpuimage #gpuimage-benchmarks td:first-child { + text-align: left; } +/* line 20, ../sass/_exceptions.sass */ +#gpuimage #gpuimage-benchmarks td:last-child { + text-align: right; } +/* line 24, ../sass/_exceptions.sass */ +#gpuimage #gpuimage-filters td { + vertical-align: top; + font-size: 75%; } +/* line 27, ../sass/_exceptions.sass */ +#gpuimage blockquote { + font-size: 75%; } + +/* line 31, ../sass/_exceptions.sass */ +table.core-data-versus-nskeyedarchiver td { + text-align: center; } +/* line 34, ../sass/_exceptions.sass */ +table.core-data-versus-nskeyedarchiver td:first-child { + text-align: left; + font-weight: bold; } + +/* line 38, ../sass/_exceptions.sass */ +table#xcode-key-bindings-modifiers { + width: 100%; } + /* line 41, ../sass/_exceptions.sass */ + table#xcode-key-bindings-modifiers td, table#xcode-key-bindings-modifiers th { + width: 20%; + text-align: center; } + +/* line 46, ../sass/_exceptions.sass */ +#cfstringtransform table { + display: block; } + /* line 49, ../sass/_exceptions.sass */ + #cfstringtransform table td:first-child { + width: 60%; } + +/* line 53, ../sass/_exceptions.sass */ +#icloud header time { + background-color: rgba(255, 128, 0, 0.2); } + +/* line 36, ../sass/screen.sass */ html, body { - font-family: "Georgia Pro", Georgia, georgia, serif; + font-family: "Georgia Pro", Georgia, serif; margin: 0; border-top: 3px #ff8000 solid; background: #f8f7f5; } -/* line 27, ../sass/screen.sass */ +/* line 42, ../sass/screen.sass */ [role="container"] { max-width: 100%; margin-left: auto; @@ -1351,7 +1404,7 @@ html, body { content: ""; display: table; clear: both; } - /* line 34, ../sass/screen.sass */ + /* line 49, ../sass/screen.sass */ [role="container"] section { display: block; max-width: 100%; @@ -1370,7 +1423,7 @@ html, body { display: table; clear: both; } -/* line 41, ../sass/screen.sass */ +/* line 56, ../sass/screen.sass */ [role='banner'] { display: block; margin-bottom: 2em; } @@ -1379,7 +1432,7 @@ html, body { content: ""; display: table; clear: both; } - /* line 45, ../sass/screen.sass */ + /* line 60, ../sass/screen.sass */ [role='banner'] #logo { float: left; display: block; @@ -1392,38 +1445,53 @@ html, body { -ms-user-select: none; user-select: none; font-size: 1em; - max-height: 7.5em; } + position: relative; + height: 6em; } /* line 38, ../sass/neat/grid/_span-columns.scss */ [role='banner'] #logo:last-child { margin-right: 0; } - /* line 51, ../sass/screen.sass */ + @media screen and (max-width: 768px) { + /* line 60, ../sass/screen.sass */ + [role='banner'] #logo { + margin-bottom: 2em; + height: 5em; } } + /* line 71, ../sass/screen.sass */ + [role='banner'] #logo a { + display: block; } + /* line 74, ../sass/screen.sass */ [role='banner'] #logo svg { width: 70%; } @media screen and (max-width: 768px) { - /* line 51, ../sass/screen.sass */ + /* line 74, ../sass/screen.sass */ [role='banner'] #logo svg { - width: 100%; } } - /* line 56, ../sass/screen.sass */ - [role='banner'] #logo .mustache { - transform-origin: center center !important; - -webkit-transform: skewX(0); - z-index: 1000; - position: absolute; } - /* line 62, ../sass/screen.sass */ - [role='banner'] #logo:hover .mustache { - animation: twirl 1s ease-in-out; - -webkit-animation: twirl 1s ease-in-out; - -moz-animation: twirl 1s ease-in-out; } - /* line 65, ../sass/screen.sass */ + width: 100% !important; } } + /* line 79, ../sass/screen.sass */ + [role='banner'] #logo svg#ns { + position: absolute; + width: 70%; + top: 0; + left: 0; } + /* line 85, ../sass/screen.sass */ + [role='banner'] #logo svg#mustache { + position: absolute; + width: 70%; + z-index: 100; + top: 0; } + /* line 91, ../sass/screen.sass */ + [role='banner'] #logo svg#mustache:hover { + animation: twirl 1s ease-in-out; + -webkit-animation: twirl 1s ease-in-out; + -moz-animation: twirl 1s ease-in-out; } + /* line 94, ../sass/screen.sass */ [role='banner'] nav { float: left; display: block; margin-right: 2.35765%; - width: 48.82117%; } + width: 40.29137%; } /* line 38, ../sass/neat/grid/_span-columns.scss */ [role='banner'] nav:last-child { margin-right: 0; } - /* line 68, ../sass/screen.sass */ + /* line 97, ../sass/screen.sass */ [role='banner'] nav li { display: block; float: left; @@ -1433,44 +1501,55 @@ html, body { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role='banner'] nav li:last-child { margin-right: 0; } - /* line 72, ../sass/screen.sass */ + /* line 101, ../sass/screen.sass */ [role='banner'] nav li a { font-size: 1.5em; display: block; - text-align: center; } - /* line 77, ../sass/screen.sass */ + text-align: center; + padding-top: 14px; } + /* line 108, ../sass/screen.sass */ + [role='banner'] nav li a.current { + padding-top: 10px; + border-top: 4px #ff8000 solid; } + /* line 112, ../sass/screen.sass */ + [role='banner'] nav li a:hover { + padding-top: 10px; + border-top: 4px #ffc080 solid; } + /* line 116, ../sass/screen.sass */ [role='banner'] form { float: left; display: block; margin-right: 2.35765%; width: 23.23176%; - margin-right: 0; } + margin-left: 8.5298%; + margin-right: 0; + float: right; } /* line 38, ../sass/neat/grid/_span-columns.scss */ [role='banner'] form:last-child { margin-right: 0; } - /* line 81, ../sass/screen.sass */ + /* line 122, ../sass/screen.sass */ [role='banner'] form input { height: 2.5em; width: 100%; margin-top: 1em; } @media screen and (max-width: 768px) { - /* line 86, ../sass/screen.sass */ + /* line 127, ../sass/screen.sass */ [role='banner'] #logo, [role='banner'] nav { width: 100%; } } @media screen and (max-width: 768px) { - /* line 90, ../sass/screen.sass */ + /* line 131, ../sass/screen.sass */ [role='banner'] form { display: none; } } @media screen and (max-width: 768px) { - /* line 41, ../sass/screen.sass */ + /* line 56, ../sass/screen.sass */ [role='banner'] { margin-bottom: 2em; } } -/* line 100, ../sass/screen.sass */ +/* line 141, ../sass/screen.sass */ #latest article { font-size: 125%; } -/* line 104, ../sass/screen.sass */ +/* line 145, ../sass/screen.sass */ #recent article { float: left; display: block; @@ -1485,11 +1564,12 @@ html, body { /* line 38, ../sass/neat/grid/_span-columns.scss */ #recent article:last-child { margin-right: 0; } - /* line 109, ../sass/screen.sass */ - #recent article:nth-of-type(3n) { - margin-right: 0; } + @media screen and (min-width: 769px) { + /* line 151, ../sass/screen.sass */ + #recent article:nth-of-type(3n) { + margin-right: 0; } } @media screen and (max-width: 768px) { - /* line 104, ../sass/screen.sass */ + /* line 145, ../sass/screen.sass */ #recent article { float: left; display: block; @@ -1499,16 +1579,16 @@ html, body { /* line 38, ../sass/neat/grid/_span-columns.scss */ #recent article:last-child { margin-right: 0; } - /* line 116, ../sass/screen.sass */ + /* line 158, ../sass/screen.sass */ #recent article:nth-of-type(2n) { margin-right: 0; } } @media screen and (max-width: 480px) { - /* line 104, ../sass/screen.sass */ + /* line 145, ../sass/screen.sass */ #recent article { width: 100%; min-height: 7em; margin-bottom: 1em; } } - /* line 124, ../sass/screen.sass */ + /* line 166, ../sass/screen.sass */ #recent article p { display: -webkit-box; overflow: hidden; @@ -1516,7 +1596,7 @@ html, body { -webkit-box-orient: vertical; text-overflow: -o-ellipsis-lastline; } -/* line 128, ../sass/screen.sass */ +/* line 170, ../sass/screen.sass */ #popular article { float: left; display: block; @@ -1525,15 +1605,15 @@ html, body { /* line 38, ../sass/neat/grid/_span-columns.scss */ #popular article:last-child { margin-right: 0; } - /* line 131, ../sass/screen.sass */ + /* line 173, ../sass/screen.sass */ #popular article:nth-of-type(2n) { margin-right: 0; } @media screen and (max-width: 480px) { - /* line 128, ../sass/screen.sass */ + /* line 170, ../sass/screen.sass */ #popular article { width: 100%; margin-bottom: 1em; } } - /* line 138, ../sass/screen.sass */ + /* line 180, ../sass/screen.sass */ #popular article p { display: -webkit-box; overflow: hidden; @@ -1541,75 +1621,109 @@ html, body { -webkit-box-orient: vertical; text-overflow: -o-ellipsis-lastline; } -/* line 145, ../sass/screen.sass */ +/* line 187, ../sass/screen.sass */ section h1 { margin-bottom: 1em; } -/* line 148, ../sass/screen.sass */ +/* line 190, ../sass/screen.sass */ [role="article"] { font-size: 125%; margin-bottom: 1em; } @media screen and (max-width: 768px) { - /* line 148, ../sass/screen.sass */ + /* line 190, ../sass/screen.sass */ [role="article"] { font-size: 100%; } } - /* line 155, ../sass/screen.sass */ + /* line 197, ../sass/screen.sass */ [role="article"] table { - overflow: scroll; } - /* line 158, ../sass/screen.sass */ + overflow: scroll; + margin: 2em 0; } + /* line 201, ../sass/screen.sass */ + [role="article"] table caption { + margin: 2em 0 1em 0; + font-size: 1.5em; } + /* line 205, ../sass/screen.sass */ [role="article"] div.highlight { border-radius: 0.25em; overflow: scroll; padding: 0 1em; margin-bottom: 1em; } - /* line 164, ../sass/screen.sass */ + /* line 211, ../sass/screen.sass */ [role="article"] header { text-align: center; margin-bottom: 3em; } - /* line 168, ../sass/screen.sass */ + /* line 215, ../sass/screen.sass */ [role="article"] header h1 { font-size: 3em; line-height: 1em; margin-bottom: 0.5em; } - /* line 172, ../sass/screen.sass */ + /* line 219, ../sass/screen.sass */ [role="article"] header h2 { - font-size: 1.25em; } - /* line 175, ../sass/screen.sass */ + font-size: 1.25em; + font-family: "Georgia Pro", Georgia, serif; + font-style: italic; + font-weight: 300; + color: #a3a39e; } + /* line 226, ../sass/screen.sass */ + [role="article"] header h2 time { + color: #64645e; + white-space: nowrap; } + /* line 230, ../sass/screen.sass */ [role="article"] .content { margin-bottom: 2em; } - /* line 178, ../sass/screen.sass */ + /* line 233, ../sass/screen.sass */ [role="article"] .content h1, [role="article"] .content h2, [role="article"] .content h3, [role="article"] .content h4, [role="article"] .content h5 { margin: 2em 0 1em 0; } - /* line 181, ../sass/screen.sass */ + /* line 236, ../sass/screen.sass */ [role="article"] .content hr { width: 40%; margin: 2em auto; } - /* line 185, ../sass/screen.sass */ - [role="article"] .content img { + /* line 240, ../sass/screen.sass */ + [role="article"] .content img, [role="article"] .content object, [role="article"] .content embed, [role="article"] .content figure, [role="article"] .content svg { margin: 1em auto; display: block; width: auto; } - /* line 190, ../sass/screen.sass */ + /* line 245, ../sass/screen.sass */ [role="article"] .content ul, [role="article"] .content ol { margin: 1.5em 0; padding: 0 3em; } - /* line 194, ../sass/screen.sass */ + /* line 249, ../sass/screen.sass */ [role="article"] .content ul li, [role="article"] .content ol li { list-style: disc; margin-bottom: 1em; } - /* line 198, ../sass/screen.sass */ + /* line 253, ../sass/screen.sass */ [role="article"] .content figure { text-align: center; } - /* line 201, ../sass/screen.sass */ + /* line 256, ../sass/screen.sass */ + [role="article"] .content del { + color: rgba(34, 34, 32, 0.5); } + /* line 259, ../sass/screen.sass */ + [role="article"] .content ins { + background-color: rgba(255, 128, 0, 0.2); + text-decoration: none; } + /* line 263, ../sass/screen.sass */ [role="article"] .content blockquote { + margin: 2em; + margin-right: 4em; border-left: 3px #ff8000 solid; } - /* line 205, ../sass/screen.sass */ + /* line 268, ../sass/screen.sass */ + [role="article"] .content blockquote cite { + margin-top: 1em; + display: block; } + @media screen and (max-width: 768px) { + /* line 263, ../sass/screen.sass */ + [role="article"] .content blockquote { + margin: 1em 0; } } + /* line 276, ../sass/screen.sass */ [role="article"] .content table th { text-align: center; } - /* line 207, ../sass/screen.sass */ + /* line 278, ../sass/screen.sass */ [role="article"] .content table td { padding: 1em; } - /* line 211, ../sass/screen.sass */ + /* line 281, ../sass/screen.sass */ + [role="article"] sup { + font-size: 50%; + margin-right: -0.5em; } + /* line 286, ../sass/screen.sass */ [role="article"] footer .contributor { float: left; display: block; @@ -1626,24 +1740,24 @@ section h1 { /* line 57, ../sass/neat/grid/_omega.scss */ [role="article"] footer .contributor:nth-child(2n+1) { clear: left; } - /* line 217, ../sass/screen.sass */ + /* line 292, ../sass/screen.sass */ [role="article"] footer .contributor:only-child { width: 100%; } - /* line 220, ../sass/screen.sass */ + /* line 295, ../sass/screen.sass */ [role="article"] footer .contributor:only-child .avatar { padding: 0 1em; } @media screen and (max-width: 480px) { - /* line 211, ../sass/screen.sass */ + /* line 286, ../sass/screen.sass */ [role="article"] footer .contributor { width: 100%; margin-bottom: 1em; } - /* line 227, ../sass/screen.sass */ + /* line 302, ../sass/screen.sass */ [role="article"] footer .contributor:not(:first-child) { border-top: none; } - /* line 230, ../sass/screen.sass */ + /* line 305, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { padding: 0; } } - /* line 233, ../sass/screen.sass */ + /* line 308, ../sass/screen.sass */ [role="article"] footer .contributor .avatar { float: left; display: block; @@ -1652,7 +1766,7 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .avatar:last-child { margin-right: 0; } - /* line 236, ../sass/screen.sass */ + /* line 311, ../sass/screen.sass */ [role="article"] footer .contributor .details { float: left; display: block; @@ -1663,23 +1777,24 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer .contributor .details:last-child { margin-right: 0; } - /* line 241, ../sass/screen.sass */ + /* line 316, ../sass/screen.sass */ [role="article"] footer .contributor .details span { font-weight: 700; } - /* line 244, ../sass/screen.sass */ + /* line 319, ../sass/screen.sass */ [role="article"] footer .contributor .details p { font-size: 0.75em; margin-top: 1em; } - /* line 248, ../sass/screen.sass */ + /* line 323, ../sass/screen.sass */ [role="article"] footer small { display: block; font-size: 1em; font-weight: 700; color: #777777; text-transform: lowercase; + font-family: "Helvetica Neue", "Helvetica", sans-serif; font-variant: small-caps; margin-bottom: 1em; } - /* line 257, ../sass/screen.sass */ + /* line 333, ../sass/screen.sass */ [role="article"] footer [role="navigation"] { display: block; } /* line 15, ../sass/bourbon/addons/_clearfix.scss */ @@ -1687,7 +1802,7 @@ section h1 { content: ""; display: table; clear: both; } - /* line 260, ../sass/screen.sass */ + /* line 336, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #continue { float: left; display: block; @@ -1696,7 +1811,13 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer [role="navigation"] #continue:last-child { margin-right: 0; } - /* line 263, ../sass/screen.sass */ + /* line 339, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #continue h1 { + margin-bottom: 0.5em; } + /* line 342, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #continue p { + font-size: 0.75em; } + /* line 345, ../sass/screen.sass */ [role="article"] footer [role="navigation"] #related { float: left; display: block; @@ -1706,14 +1827,29 @@ section h1 { /* line 38, ../sass/neat/grid/_span-columns.scss */ [role="article"] footer [role="navigation"] #related:last-child { margin-right: 0; } + @media screen and (max-width: 480px) { + /* line 345, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #related { + margin-top: 1em; } } + /* line 352, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #related li { + font-size: 0.75em; } + @media screen and (max-width: 480px) { + /* line 352, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #related li { + font-size: 1em; } } + @media screen and (max-width: 480px) { + /* line 359, ../sass/screen.sass */ + [role="article"] footer [role="navigation"] #continue, [role="article"] footer [role="navigation"] #related { + width: 100%; } } -/* line 267, ../sass/screen.sass */ +/* line 363, ../sass/screen.sass */ [role="contentinfo"] { text-align: center; margin-top: 2em; padding: 1em; } -/* line 272, ../sass/screen.sass */ +/* line 368, ../sass/screen.sass */ .avatar { -webkit-touch-callout: none; -webkit-user-select: none; @@ -1727,36 +1863,34 @@ section h1 { pointer-events: none; user-select: none; } -/* line 282, ../sass/screen.sass */ +/* line 378, ../sass/screen.sass */ html ::selection, html ::-moz-selection, body ::selection, body ::-moz-selection { background: rgba(76, 49, 80, 0.5); color: white; } -/* line 286, ../sass/screen.sass */ +/* line 382, ../sass/screen.sass */ a, a:visited { color: #ff8000 !important; } - /* line 289, ../sass/screen.sass */ + /* line 385, ../sass/screen.sass */ a:hover, a:visited:hover { text-decoration: none; } -/* line 293, ../sass/screen.sass */ +/* line 389, ../sass/screen.sass */ .archive dl { float: left; display: block; margin-right: 2.35765%; width: 31.76157%; - clear: right; } + margin-right: 0; } /* line 38, ../sass/neat/grid/_span-columns.scss */ .archive dl:last-child { margin-right: 0; } - /* line 52, ../sass/neat/grid/_omega.scss */ - .archive dl:nth-child(3) { - margin-right: 0; } - /* line 57, ../sass/neat/grid/_omega.scss */ - .archive dl:nth-child(3+1) { - clear: left; } + @media screen and (max-width: 480px) { + /* line 389, ../sass/screen.sass */ + .archive dl { + width: 100%; } } -/* line 299, ../sass/screen.sass */ +/* line 397, ../sass/screen.sass */ #sharing ul { display: block; float: right; } @@ -1765,48 +1899,134 @@ a, a:visited { content: ""; display: table; clear: both; } -/* line 305, ../sass/screen.sass */ + @media screen and (max-width: 480px) { + /* line 397, ../sass/screen.sass */ + #sharing ul { + width: 100%; } } +/* line 405, ../sass/screen.sass */ #sharing li { - font-size: 1em; + font-size: 1.5em; display: block; margin: 0.5em; float: left; } + @media screen and (max-width: 480px) { + /* line 405, ../sass/screen.sass */ + #sharing li { + display: none !important; + margin: 0; + float: left; + display: block; + margin-right: 2.35765%; + width: 23.23176%; } + /* line 38, ../sass/neat/grid/_span-columns.scss */ + #sharing li:last-child { + margin-right: 0; } + /* line 52, ../sass/neat/grid/_omega.scss */ + #sharing li:nth-child(4) { + margin-right: 0; } + /* line 57, ../sass/neat/grid/_omega.scss */ + #sharing li:nth-child(4+1) { + clear: left; } + /* line 417, ../sass/screen.sass */ + #sharing li a, #sharing li i { + display: block; + margin: 0 auto; + font-size: 1.25em; } } + /* line 422, ../sass/screen.sass */ + #sharing li a:hover { + text-decoration: none; + color: #4c3150 !important; } -/* line 313, ../sass/screen.sass */ -.archive ul > li, [role="contentinfo"] ul > li { +/* line 432, ../sass/screen.sass */ +.archive ul > li, [role="contentinfo"] ul > li, #related ul > li { list-style: disc inside !important; display: table-row; } - /* line 317, ../sass/screen.sass */ - .archive ul > li:before, [role="contentinfo"] ul > li:before { + /* line 436, ../sass/screen.sass */ + .archive ul > li:before, [role="contentinfo"] ul > li:before, #related ul > li:before { content: "●"; display: table-cell; padding-right: 0.5em; } -/* line 322, ../sass/screen.sass */ -.archive ol, [role="contentinfo"] ol { +/* line 441, ../sass/screen.sass */ +.archive ol, [role="contentinfo"] ol, #related ol { counter-reset: list; } -/* line 325, ../sass/screen.sass */ -.archive ol > li, [role="contentinfo"] ol > li { +/* line 444, ../sass/screen.sass */ +.archive ol > li, [role="contentinfo"] ol > li, #related ol > li { list-style: disc inside !important; display: table-row; } - /* line 329, ../sass/screen.sass */ - .archive ol > li:before, [role="contentinfo"] ol > li:before { + /* line 448, ../sass/screen.sass */ + .archive ol > li:before, [role="contentinfo"] ol > li:before, #related ol > li:before { counter-increment: list; content: counter(list) "."; display: table-cell; padding-right: 0.5em; } -/* line 335, ../sass/screen.sass */ -.archive dl, [role="contentinfo"] dl { +/* line 454, ../sass/screen.sass */ +.archive dl, [role="contentinfo"] dl, #related dl { padding: 0 0.5em; } - /* line 338, ../sass/screen.sass */ - .archive dl dt, [role="contentinfo"] dl dt { + /* line 457, ../sass/screen.sass */ + .archive dl dt, [role="contentinfo"] dl dt, #related dl dt { font-size: 1.5em; margin-bottom: 1em; } - /* line 342, ../sass/screen.sass */ - .archive dl dd, [role="contentinfo"] dl dd { + /* line 461, ../sass/screen.sass */ + .archive dl dd, [role="contentinfo"] dl dd, #related dl dd { list-style: disc inside !important; display: table-row; } - /* line 346, ../sass/screen.sass */ - .archive dl dd:before, [role="contentinfo"] dl dd:before { + /* line 465, ../sass/screen.sass */ + .archive dl dd:before, [role="contentinfo"] dl dd:before, #related dl dd:before { content: "●"; display: table-cell; padding-right: 0.5em; } + +/* line 470, ../sass/screen.sass */ +section > h1 { + font-family: "Georgia Pro", Georgia, serif; + font-weight: 300; + font-style: italic; + text-align: center; + margin-bottom: 3em; + font-size: 1.5em; } + +/* line 480, ../sass/screen.sass */ +article.excerpt h1 { + font-size: 1.5em; } + +/* line 483, ../sass/screen.sass */ +a.readmore { + font-style: italic; } + /* line 486, ../sass/screen.sass */ + a.readmore:after { + content: " ⟩"; } + +/* line 490, ../sass/screen.sass */ +.content a:hover, [role="contentinfo"] a:hover, footer ul a:hover { + text-decoration: underline; } + +/* line 493, ../sass/screen.sass */ +h1 a:hover { + background: #ff8000; + color: white !important; } + +/* line 498, ../sass/screen.sass */ +.book { + float: left; + display: block; + margin-right: 2.35765%; + width: 31.76157%; } + /* line 38, ../sass/neat/grid/_span-columns.scss */ + .book:last-child { + margin-right: 0; } + /* line 500, ../sass/screen.sass */ + .book:nth-of-type(3n) { + margin-right: 0; } + /* line 503, ../sass/screen.sass */ + .book a { + display: block; } + /* line 508, ../sass/screen.sass */ + .book img { + display: block; + margin: 0 auto; + width: 200px; + padding: 4px; } + /* line 514, ../sass/screen.sass */ + .book img:hover { + padding: 0; + border: 4px #ff8000 solid; } diff --git a/nshipster.com/index.html b/nshipster.com/index.html index 3dbdfb1a..8a9be340 100644 --- a/nshipster.com/index.html +++ b/nshipster.com/index.html @@ -1,7 +1,6 @@ --- layout: default title: NSHipster -foo: [5, 1,2,3] --- {% contentfor header %} @@ -19,7 +18,7 @@

    {{ site.posts.first.title | camel_break {{ site.posts.first.excerpt | markdownify }} - Read more + Continue Reading @@ -27,7 +26,7 @@

    {{ site.posts.first.title | camel_break

    Recent Articles

    {% for post in site.posts offset:1 | limit: 6 %} -
    +

    {{ post.title | camel_break }}

    @@ -39,11 +38,15 @@

    {{ post.title | camel_break }}

    Publications

    -
    - - - -
    + {% for book in site.data.books %} + {% assign identifier = book[0] %} + {% assign content = book[1] %} + + {% endfor %}

    - - diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index 57bc8fd0..b31080cd 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -28,7 +28,7 @@

    diff --git a/nshipster.com/css/screen.css b/nshipster.com/css/screen.css deleted file mode 100644 index ce4a5fe3..00000000 --- a/nshipster.com/css/screen.css +++ /dev/null @@ -1,2032 +0,0 @@ -@charset "UTF-8"; -/* line 2, ../sass/neat/grid/_grid.scss */ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -/* line 1, ../sass/base/extends/_button.scss */ -button, -input[type="submit"] { - -webkit-font-smoothing: antialiased; - background-color: #477dca; - border-radius: 0.1875em; - color: white; - display: inline-block; - font-size: 1em; - font-weight: bold; - line-height: 1; - padding: .75em 1em; - text-decoration: none; } - /* line 13, ../sass/base/extends/_button.scss */ - button:hover, - input[type="submit"]:hover { - background-color: #2c5999; - color: white; } - -/* line 1, ../sass/base/_typography.scss */ -body { - -webkit-font-smoothing: antialiased; - background-color: white; - color: #333333; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; - font-size: 1em; - line-height: 1.5; } - -/* line 10, ../sass/base/_typography.scss */ -h1, h2, h3, h4, h5, h6 { - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; - line-height: 1.25em; - margin: 0; - text-rendering: optimizeLegibility; } - -/* line 17, ../sass/base/_typography.scss */ -h1 { - font-size: 2.25em; } - -/* line 21, ../sass/base/_typography.scss */ -h2 { - font-size: 2em; } - -/* line 25, ../sass/base/_typography.scss */ -h3 { - font-size: 1.75em; } - -/* line 29, ../sass/base/_typography.scss */ -h4 { - font-size: 1.5em; } - -/* line 33, ../sass/base/_typography.scss */ -h5 { - font-size: 1.25em; } - -/* line 37, ../sass/base/_typography.scss */ -h6 { - font-size: 1em; } - -/* line 41, ../sass/base/_typography.scss */ -p { - margin: 0 0 0.75em; } - -/* line 45, ../sass/base/_typography.scss */ -a { - -webkit-transition: color 0.1s linear; - -moz-transition: color 0.1s linear; - transition: color 0.1s linear; - color: #477dca; - text-decoration: none; } - /* line 50, ../sass/base/_typography.scss */ - a:hover { - color: #2c5999; } - /* line 54, ../sass/base/_typography.scss */ - a:active, a:focus { - color: #2c5999; - outline: none; } - -/* line 60, ../sass/base/_typography.scss */ -hr { - border-bottom: 1px solid #dddddd; - border-left: none; - border-right: none; - border-top: none; - margin: 1.5em 0; } - -/* line 68, ../sass/base/_typography.scss */ -img { - margin: 0; - max-width: 100%; } - -/* line 73, ../sass/base/_typography.scss */ -blockquote { - border-left: 2px solid #dddddd; - color: #595959; - margin: 1.5em 0; - padding-left: 0.75em; } - -/* line 80, ../sass/base/_typography.scss */ -cite { - color: #737373; - font-style: italic; } - /* line 84, ../sass/base/_typography.scss */ - cite:before { - content: '\2014 \00A0'; } - -/* line 1, ../sass/base/_forms.scss */ -fieldset { - background: #f7f7f7; - border: 1px solid #dddddd; - margin: 0 0 0.75em 0; - padding: 1.5em; } - -/* line 8, ../sass/base/_forms.scss */ -input, -label, -select { - display: block; - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; - font-size: 1em; } - -/* line 16, ../sass/base/_forms.scss */ -label { - font-weight: bold; - margin-bottom: 0.375em; } - /* line 20, ../sass/base/_forms.scss */ - label.required:after { - content: "*"; } - /* line 24, ../sass/base/_forms.scss */ - label abbr { - display: none; } - -/* line 29, ../sass/base/_forms.scss */ -textarea, -input[type="email"], input[type="number"], input[type="password"], input[type="search"], input[type="tel"], input[type="text"], input[type="url"], input[type="color"], input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"], -select[multiple=multiple] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: border-color; - -moz-transition: border-color; - transition: border-color; - background-color: white; - border-radius: 0.1875em; - border: 1px solid #dddddd; - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.06); - font-family: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; - font-size: 1em; - margin-bottom: 0.75em; - padding: 0.5em 0.5em; - width: 100%; } - /* line 44, ../sass/base/_forms.scss */ - textarea:hover, - input[type="email"]:hover, input[type="number"]:hover, input[type="password"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="text"]:hover, input[type="url"]:hover, input[type="color"]:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="month"]:hover, input[type="time"]:hover, input[type="week"]:hover, - select[multiple=multiple]:hover { - border-color: #c4c4c4; } - /* line 48, ../sass/base/_forms.scss */ - textarea:focus, - input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, - select[multiple=multiple]:focus { - border-color: #477dca; - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.06), 0 0 5px rgba(55, 112, 192, 0.7); - outline: none; } - -/* line 55, ../sass/base/_forms.scss */ -textarea { - resize: vertical; } - -/* line 59, ../sass/base/_forms.scss */ -input[type="search"] { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; } - -/* line 63, ../sass/base/_forms.scss */ -input[type="checkbox"], input[type="radio"] { - display: inline; - margin-right: 0.375em; } - -/* line 68, ../sass/base/_forms.scss */ -input[type="file"] { - margin-bottom: 0.75em; - padding-bottom: 0.5em; - width: 100%; } - -/* line 74, ../sass/base/_forms.scss */ -select { - width: auto; - max-width: 100%; - margin-bottom: 1.5em; } - -/* line 1, ../sass/base/_tables.scss */ -table { - border-collapse: collapse; - margin: 0.75em 0; - table-layout: fixed; - width: 100%; } - -/* line 8, ../sass/base/_tables.scss */ -th { - border-bottom: 1px solid #b7b7b7; - font-weight: bold; - padding: 0.75em 0; - text-align: left; } - -/* line 15, ../sass/base/_tables.scss */ -td { - border-bottom: 1px solid #dddddd; - padding: 0.75em 0; } - -/* line 20, ../sass/base/_tables.scss */ -tr, td, th { - vertical-align: middle; } - -/* line 1, ../sass/base/_lists.scss */ -ul, ol { - margin: 0; - padding: 0; - list-style-type: none; } -/* line 19, ../sass/base/_lists.scss */ -dl { - margin-bottom: 0.75em; } - /* line 22, ../sass/base/_lists.scss */ - dl dt { - font-weight: bold; - margin-top: 0.75em; } - /* line 27, ../sass/base/_lists.scss */ - dl dd { - margin: 0; } - -/* line 1, ../sass/base/_buttons.scss */ -button, -input[type="submit"] { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - border: none; - cursor: pointer; - user-select: none; - vertical-align: middle; - white-space: nowrap; } - -@font-face { - font-family: "nshipster"; - src: url("/fonts/nshipster.eot?chu8de"); - src: url("/fonts/nshipster.eot?#iefixchu8de") format("embedded-opentype"), url("/fonts/nshipster.woff?chu8de") format("woff"), url("/fonts/nshipster.ttf?chu8de") format("truetype"), url("/fonts/nshipster.svg?chu8de#nshipster") format("svg"); - font-weight: normal; - font-style: normal; } -/* line 8, ../sass/_fonts.sass */ -[class^="icon-"], [class*=" icon-"] { - font-family: "nshipster"; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -/* line 19, ../sass/_fonts.sass */ -.icon-mustache:before { - content: "\e600"; } - -/* line 22, ../sass/_fonts.sass */ -.icon-envelope:before { - content: "\e601"; } - -/* line 25, ../sass/_fonts.sass */ -.icon-gumroad:before { - content: "\e602"; } - -/* line 28, ../sass/_fonts.sass */ -.icon-xcode:before { - content: "\e603"; } - -/* line 31, ../sass/_fonts.sass */ -.icon-cocoa:before { - content: "\e604"; } - -/* line 34, ../sass/_fonts.sass */ -.icon-objective-c:before { - content: "\e605"; } - -/* line 37, ../sass/_fonts.sass */ -.icon-osi:before { - content: "\e606"; } - -/* line 40, ../sass/_fonts.sass */ -.icon-swift:before { - content: "\e607"; } - -/* line 43, ../sass/_fonts.sass */ -.icon-mobile:before { - content: "\e608"; } - -/* line 46, ../sass/_fonts.sass */ -.icon-tablet:before { - content: "\e609"; } - -/* line 49, ../sass/_fonts.sass */ -.icon-mail:before { - content: "\e60a"; } - -/* line 52, ../sass/_fonts.sass */ -.icon-googleplus:before { - content: "\e60b"; } - -/* line 55, ../sass/_fonts.sass */ -.icon-facebook:before { - content: "\e60c"; } - -/* line 58, ../sass/_fonts.sass */ -.icon-twitter:before { - content: "\e60d"; } - -/* line 61, ../sass/_fonts.sass */ -.icon-feed:before { - content: "\e60e"; } - -/* line 64, ../sass/_fonts.sass */ -.icon-github:before { - content: "\e60f"; } - -/* line 67, ../sass/_fonts.sass */ -.icon-apple:before { - content: "\e610"; } - -/* line 70, ../sass/_fonts.sass */ -.icon-safari:before { - content: "\e612"; } - -/* line 73, ../sass/_fonts.sass */ -.icon-cc:before { - content: "\e613"; } - -@-webkit-keyframes twirl { - /* line 2, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ - 0% { - -webkit-transform: scale(1); } - - /* line 4, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ - 10%, 20% { - -webkit-transform: scale(0.9) rotate(-3deg); } - - /* line 6, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ - 30%, 50%, 70%, 90% { - -webkit-transform: scale(1.1) rotate(3deg); } - - /* line 8, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ - 40%, 60%, 80% { - -webkit-transform: scale(1.1) rotate(-3deg); } - - /* line 10, /Users/mattt/Sites/nshipster.com/assets/sass/_animations.sass */ - 100% { - -webkit-transform: scale(1) rotate(0); } } -/* line 1, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ -.highlight { - background-color: #e5e5e5; - color: #586e75; } - /* line 2, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .hll { - background-color: #e5e5e5; } - /* line 8, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .c { - color: #93a1a1; } - /* line 10, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .g { - color: #d33682; } - /* line 12, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .k { - color: #859900; } - /* line 14, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .l { - color: #2aa198; } - /* line 16, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .n { - color: #268bd2; } - /* line 18, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .cm, .highlight .cp, .highlight .c1, .highlight .cs { - color: #93a1a1; } - /* line 20, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .gd, .highlight .ge, .highlight .gr, .highlight .gh, .highlight .gi, .highlight .go, .highlight .gp, .highlight .gs, .highlight .gu, .highlight .gt { - color: #d33682; } - /* line 22, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .kc { - color: #859900; - font-weight: bold; } - /* line 25, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .kd { - color: #859900; } - /* line 27, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .kn { - color: #dc322f; - font-weight: bold; } - /* line 30, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .kp, .highlight .kr { - color: #859900; } - /* line 32, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .kt { - color: #859900; - font-weight: bold; } - /* line 35, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .ld { - color: #2aa198; } - /* line 37, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .m { - color: #2aa198; - font-weight: bold; } - /* line 40, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .s { - color: #2aa198; } - /* line 42, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .na { - color: #268bd2; } - /* line 44, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .nb, .highlight .nc { - color: #cb4b16; } - /* line 46, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .no, .highlight .nd, .highlight .ni, .highlight .ne, .highlight .nf, .highlight .nl, .highlight .nn, .highlight .nx, .highlight .py { - color: #268bd2; } - /* line 48, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .nt { - color: #268bd2; - font-weight: bold; } - /* line 51, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .nv { - color: #268bd2; } - /* line 53, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .ow { - color: #859900; } - /* line 55, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .w { - color: #586e75; } - /* line 57, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .mf, .highlight .mh, .highlight .mi, .highlight .mo { - color: #2aa198; - font-weight: bold; } - /* line 60, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx, .highlight .sr, .highlight .s1, .highlight .ss { - color: #2aa198; } - /* line 62, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .bp { - color: #cb4b16; } - /* line 64, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .vc, .highlight .vg, .highlight .vi { - color: #268bd2; } - /* line 66, /Users/mattt/Sites/nshipster.com/assets/sass/_pygments.sass */ - .highlight .il { - color: #2aa198; - font-weight: bold; } - -/* line 1, ../sass/_swiftype.sass */ -div.st-lb_overlay { - background-color: rgba(0, 0, 0, 0.3); } - -/* line 4, ../sass/_swiftype.sass */ -.st-modal-overflow .swiftype { - margin-bottom: 20px; } - -/* line 7, ../sass/_swiftype.sass */ -.swiftype-widget .autocomplete ul li { - padding-left: 31px; } - -/* line 10, ../sass/_swiftype.sass */ -#st-launcher-tab { - position: fixed; - right: 60px; - bottom: -40px; - height: 26px; - color: #eeeeee; - font-size: 13px; - letter-spacing: 1px; - font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - border-top-left-radius: 5px; - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - border-top-right-radius: 5px; - background: #484848 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6%2BR8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMtJREFUeNpi%2Bv%2F%2FPwMU2wPxLiB%2BBcQ3gHgOEIsiycMxjFH0HwKeQBWvA%2BKfUAN0sWkCCf4B4o1AzIkkaQDEH4D4PDZNLVBTsTkF5gItZHEmBgYGFSB%2BAcSvGTDBNSitiCwI0vQIiKWBWBSLJmMo%2FRRFFOqn%2F1DP86D56S0uP4FwNVTjcyCeD8RboIHzH%2BpfP2yaYPF0ABpi94B4EVQzTGMgNk3YMBvU2TCNIcRogmlcjexUFgbC4BcQR0PZIUDsRIxNMMwMDRA2gAADALT3szNjmcT8AAAAAElFTkSuQmCC) no-repeat center left; - border-left: 10px solid #484848; - padding: 2px 10px; - padding-left: 22px; - line-height: 24px; - cursor: pointer; - overflow: hidden; } - /* line 32, ../sass/_swiftype.sass */ - #st-launcher-tab:hover { - color: white; } - -/* line 35, ../sass/_swiftype.sass */ -div.swiftype { - font-family: "Lucida Grande", sans-serif; - overflow: auto; - overflow-x: hidden; - background: white url(//swiftype-assets.a.ssl.fastly.net/assets/overlay_bg-4b8fea9c8f2717d10b7da7f5ed7f7bc6.png) repeat-x; - font-size: 13px; - line-height: 16px; - min-height: 480px; - position: relative; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.6); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.6); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.6); - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - -ms-border-radius: 5px; - -o-border-radius: 5px; - border-radius: 5px; } - /* line 52, ../sass/_swiftype.sass */ - div.swiftype.with-results .st-result-wrapper { - background-image: none; } - /* line 54, ../sass/_swiftype.sass */ - div.swiftype .clearfix { - *zoom: 1; } - /* line 56, ../sass/_swiftype.sass */ - div.swiftype .clearfix:after { - content: ""; - display: table; - clear: both; } - /* line 60, ../sass/_swiftype.sass */ - div.swiftype a.close { - text-align: center; - font-weight: bold; - font-size: 18px; - font-family: Helvetica, Arial, "Lucida Grande", sans-serif; - text-decoration: none; - position: absolute; - top: 23px; - right: 15px; - display: block; - width: 20px; - height: 20px; - line-height: 18px; - vertical-align: middle; - background-color: #666666; - color: white; - opacity: 0.2; - -moz-opacity: 0.2; - -khtml-opacity: 0.2; - filter: alpha(opacity=20); - zoom: 1; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - -ms-border-radius: 2px; - -o-border-radius: 2px; - border-radius: 2px; - -webkit-box-shadow: 0 1px 0 white, 1px 1px 4px rgba(0, 0, 0, 0.4) inset; - -moz-box-shadow: 0 1px 0 white, 1px 1px 4px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 0 white, 1px 1px 4px rgba(0, 0, 0, 0.4) inset; - text-shadow: 0 0 2px rgba(0, 0, 0, 0.9); } - /* line 90, ../sass/_swiftype.sass */ - div.swiftype a.close:hover { - opacity: 0.3; - -moz-opacity: 0.3; - -khtml-opacity: 0.3; - filter: alpha(opacity=30); - zoom: 1; } - /* line 96, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar { - height: 56px; - width: 100%; - margin: 0 auto; - padding-top: 15px; - padding-right: 65px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - /* line 105, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - /* line 109, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar .st-input-wrapper { - margin-left: 15px; - margin-right: 60px; - height: 34px; - max-width: 884px; - width: 100%; - color: #555555; - background-color: white; - padding: 0; - padding-right: 68px; - border: 1px solid #cccccc; - overflow: hidden; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - -ms-border-radius: 2px; - -o-border-radius: 2px; - border-radius: 2px; - -webkit-box-shadow: 0 1px 0 white, 1px 1px 2px rgba(0, 0, 0, 0.1) inset; - -moz-box-shadow: 0 1px 0 white, 1px 1px 2px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 0 white, 1px 1px 2px rgba(0, 0, 0, 0.1) inset; } - /* line 129, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar .st-input-wrapper .st-input-inner { - float: left; - position: relative; - display: block; - padding-left: 36px; - padding-right: 135px; - width: 100%; } - /* line 136, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar .st-input-wrapper .st-input-inner .st-input-powered-by { - float: left; - position: relative; - display: block; - width: 125px; - height: 34px; - margin-right: -130px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH0AAAAOCAYAAAACNhNKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB95JREFUeNrsmAdwFVUUhs%2Fu5pUkQIQQBRWCFAWkCIpixT4WRMUGOo69YAcrijhWLCCIggUsiN1BKYoIg4gFbBEUNIqjQUkoLwESUuC1fZ778m2yPhjHUZlxwDvzz7539%2B69597zn%2F%2BcXWvGjBmyo7dEIChtVnwnB8ybKYlg0H%2FrAMXVioMVLRQpxQbFIsVDihVmkKPYonfOXF0lZQlXAtbfNsU8GVAkQY7iYkVnRUQxTrFpe59HluwkzUqp1wwa21mKFzj4%2BpZUPwQCu4rrGiccrzhCUSKw4V9o%2FRVPKOYpLlVcrhjLve8VEyHFrooaRdX2OAt7Z3F4PBiSlON4Xe0Uk%2F7g8M11YvfuI1ZecxHXBKHsqbgmfUi2JcWxhJQpKbKsf2xO3MehLlwNEfZXVCiGKb6FlPK%2F0%2F%2FuJpMJWd96T6lu0VJ%2Fpx16mSKvQXFra8Q%2BpJ9YfQ%2BX1Lo1%2BkADOQ7xonxWTVRibr0%2Ba2uj6KBoxrjgNlTTyThnM2YOKeVGn9ybVmcyCL97kWqyuR8k%2BjPpFuCe2UcT%2BlpB1szWEpttT95NTunOIqsVT5FfzKRXIXE%2FKB5VVCpGKmYqihTXKsoVrylOZuJixSkYYnF%2FPOvsjqHlrFOmuJKcFmb8x%2BBqDtUcxmzF3G1I5VFE6xZsMhJ5q2Iyv9sbG3XS8clAsCSanSNNN1QYZ5zYcOaba8Xq1EWcocMldf8dYkW3SKox7%2Bfr4GAknowtqItJyLLyte9J1jbntR77T8aZZyp%2BVLylKFQcQ%2B7%2BQPGdYpriQcVHircV57LOEM7A7PtU%2Bu5WXKEYo7iJNHM6SjFBcZjiHsVoxUr2e6EiqnhaMRzyjOE544%2FPjR9sjB7IZOahV3H4S4oROOgMxXwccwYOtCk8bsfIWxR9iI5hOCObq1nwLkU3HHQ%2B69gQZwDjwjxjZO9mmLuv4n3yn78NhBgm93WFFE1Yf7JPNvu7thNptj4izTWKk47TGjKIxNSU3VqLM3KU1JRHpKKsTBJdu0vKtr38b6u0W99GE1KeTBlpvwbZXay4njWLKb7M3noqOnLIvRWdFAdCiFJFCFs7QpjfsNM4bSGFo1fILWffnxryQawu7PESk5AUq0hVR7K%2BcarmJ7mNsQ%2Fh01mK%2BzibUSbSVbRkOptYiiP7Kc6GTd6iZUTwSzDdbCbGIh3AKDZewsIpnBL0MXQaFfJFRHacNUagPGuZ38w9CJJMhlzPEjnpopxDGkfR1YWceIFimWKK4lizB3V6bV5FRAIaxfFQqED7mqaLtqZ5knX7vVo27SbFi3%2BR8N1jJLD0C8l9XoO5Pv8bG5KJxiTcmrXDRPQkDn%2BB4jr2XsgY80hfnCKccaGvgC6CNMbuGSip4IejFc8DQTmG0L875JnoK%2FRMYJ6ELT9B6gG%2Bc5yIihvS9s3CKQNhZR%2BkuiV55msmXc9kJt%2B8ggHGae%2Fg9CFscpFv4x%2BS195V3MF8RtqGKg4iSpP0n0MaCRD5tay7CyRYiBSGGC%2FIWDukrJBxAZwxBtKZtPKFpFwpKC3RCE6nxZy0wliWiWNxn3lc4vkF0mrIMMldtkRyX3wm3Z%2B%2BL7JRAz5R4NgS1v%2B6wce0twcRM4dIvQD7jF0nMP972HoeEmvS5RLF3j5CeLWAMDbzjSrb1%2FcmZ3waAVNHOvMIlWSuWpzbntweQk2ncjUB9qvNImvIO9cj9ysxvhuTNmOileSmBBL9BlJ3JaTYlI6i%2BnE9ef4GDDIGvMj%2FuciVMN4Y1YPxs32Fief8w5HHqO8gsslj%2FZHP7r4c%2BTLXF1x1YE5NteSvKZVkVlZj8WocW1crqaLPZHPbdhJcu1qaTHhErES8%2Fl59KzG%2BL00k9VTTfjK1zaHY%2BZyiLdGzUfEZkt6ZemUm5O5Eakz%2BxVdkb%2FGYr28x53sEqWM69VXAN6aK%2BdvyfxlB55KOjaLsY2qGLKK6iILAa0WwdToHeBwMehOH%2FwwJPod1uRjmVa0dSAOevD8CcX5RfEURM5qxFhspwOjFRGsQUuUQWRf7pN1bZz%2Bkv4D%2Fy32VbUMFbWLUdl3vuYYf%2Bj4uyTbtJN65m%2BSNfUDs6k2SCoUl47Dlo81xietOQlb6vb4zDu7ImKVcFyC%2FVTi5p2%2Be9zKiOJwR6f4vRp6zr0OyjTL%2Bii9u5t6UjOq%2FBamvPU6fjyIPotidjH3mvusMHjw4iiN%2B9C3s5fkAkr%2BESnIt90th3mykv47CrAKjV5Ffquj7RLGO3B2BCKb%2FSxhbxvhKVMLr34SEjqAY8bct2GEx10g2Jj6yfahFWU1YI7qw%2BBuxU%2Bady8phL46VSEis90ES%2FKZIgj8sl1TYr6hSqxMP1bivnFYdlTVJVws5q5M0yrtDRD9MIFRTpL2OknnF3So%2BwFTz0WUvguV9gqMpKvsV60ZQh3z29i77q%2BRV8yfeUEwA7EGfi6%2FiEOJGzn4hr3RtsMX0zbR29M%2BwiWBIOmpx1uOTeekPNBzOIlKCuHnNxdlQLilnK%2BU19cfwLK0DhkWqZU5NTHLthlflEORObUfTPSd67XQKOlOF30nfgRBoHdJd9Scpw4acO%2F7HGculiLNs%2FxexWyiIxN5YsS2HT0I50qHmbD1tdDs7XHwOD%2FHqNRWiTd1G%2Fm%2BSkd8zm%2Bs5fKf69p7RFlBknSu204u6Ic4r4CxfmvgvtCTv4T%2FzwWaF714lqWR1RpH7p%2B13AQYAa5V2OsST10YAAAAASUVORK5CYII%3D) no-repeat center center; - opacity: 0.6; - -moz-opacity: 0.6; - -khtml-opacity: 0.6; - filter: alpha(opacity=60); - zoom: 1; } - /* line 149, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar .st-input-wrapper .st-input-inner .st-input-powered-by:hover { - opacity: 1; - -moz-opacity: 1; - -khtml-opacity: 1; - filter: alpha(opacity=100); - zoom: 1; } - /* line 155, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar .st-input-wrapper .st-input-inner .st-input-icon { - float: left; - position: relative; - display: block; - width: 34px; - height: 34px; - right: 34px; - margin-right: 4px; - margin-left: -100%; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6%2BR8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAM1JREFUeNpi%2BP%2F%2FPwMIA4E9EO8C4ldAfAOI5wCxKEweGcM0FAExiPEEqngdEP%2BEGqCLoQkkCMR%2FgHgjEHMiSRgA8QcgPo9NUwvUVFEskjAXaCGLMwEFVID4BZDzmgETXIPSisiCIE2PgFiakZFRFIsmYyj9FF1CF%2BoEkOd50Pz0FqufoAqqoRqfA%2FF8IN4CDZz%2FUP%2F6YWhCiqcD0BC7B8SLoJphGgMxNGGNRAYGNqizYRpDCGpC0rga2akENWHROIEoTVCNzGBbgAYABBgAuBMPKvUg1p8AAAAASUVORK5CYII%3D) no-repeat center center; } - /* line 166, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar input[type='text'] { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - -webkit-border-radius: none; - -moz-border-radius: none; - -ms-border-radius: none; - -o-border-radius: none; - border-radius: none; - text-shadow: none; - text-align: left; - letter-spacing: normal; - border: 0; - padding: 0; - margin: 0; - text-indent: 0; - word-spacing: normal; - text-transform: none; - cursor: auto; - float: left; - position: relative; - display: block; - background-color: transparent; - height: 30px; - line-height: 24px; - vertical-align: top; - width: 100%; - margin-top: 2px; - margin-bottom: 2px; - padding-left: 0px; - outline: none; - border: 0; - font-size: 14px; } - /* line 199, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar input[type='submit'] { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - -webkit-border-radius: none; - -moz-border-radius: none; - -ms-border-radius: none; - -o-border-radius: none; - border-radius: none; - text-shadow: none; - text-align: left; - letter-spacing: normal; - border: 0; - padding: 0; - margin: 0; - text-indent: 0; - word-spacing: normal; - text-transform: none; - cursor: auto; - float: left; - position: relative; - display: block; - width: 68px; - height: 35px; - margin: 0; - margin-right: -68px; - border: 0; - border-left: 1px solid #cccccc; - cursor: pointer; - -webkit-box-shadow: 0 1px 0 white inset; - -moz-box-shadow: 0 1px 0 white inset; - box-shadow: 0 1px 0 white inset; - -webkit-border-radius: 0 2px 2px 0; - -moz-border-radius: 0 2px 2px 0; - -ms-border-radius: 0 2px 2px 0; - -o-border-radius: 0 2px 2px 0; - border-radius: 0 2px 2px 0; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #ececec)); - background-image: -webkit-linear-gradient(#fafafa, #ececec); - background-image: -moz-linear-gradient(#fafafa, #ececec); - background-image: -o-linear-gradient(#fafafa, #ececec); - background-image: linear-gradient(#fafafa, #ececec); - font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; - color: #656565; - text-transform: uppercase; - font-size: 11px; - font-weight: bold; - line-height: 22px; - padding: 2px 10px; - vertical-align: top; } - /* line 249, ../sass/_swiftype.sass */ - div.swiftype div.st-search-bar input[type='submit']:hover { - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e8e8e8), color-stop(100%, #ececec)); - background-image: -webkit-linear-gradient(#e8e8e8, #ececec); - background-image: -moz-linear-gradient(#e8e8e8, #ececec); - background-image: -o-linear-gradient(#e8e8e8, #ececec); - background-image: linear-gradient(#e8e8e8, #ececec); } - /* line 255, ../sass/_swiftype.sass */ - div.swiftype .st-result-wrapper { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADaCAYAAABQDiUUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAC4VJREFUeNrs3f9100gXxvHBh%2F%2FtDmIqiKkg3gowFdhUgKmAUAGhAkQFhApQKsCuAKeCVdLAru%2FJ1SK8SbBjSffOzPc5Rwc45903ysgf3fkhj57f3t6GzHPW%2BPtoe0zu%2Bd%2Bstke18%2B%2BbQEgLeZ4RtIkimz6C7dBs9Fg1%2FgQoOSjPEqyEQ4VWHxODc6gxlnpc81EjqSM83R4LQ3T7VMxLBfmNjx1JBWENb7Y9xhGdd6Ugi%2B1xxUeQxIZwqOiWTiveUypkoQddVhC6zsn2OFeAo0SvRUF1zDODCPB91oqxSBhg0N9Pxozfw%2B%2FLJgSELvDllCkYQWg95vuYKb6HMH7VmxIBYed5q%2FiWXJbfMtN2ea83KZJYPEzMyFJDEdKY7ew6dQ%2BByRsqYWuRu%2FsKgHtnrF3Uj1RFKuGxkTHOJfioisSmEs6pfq1Wxfc0BQgPyWcd%2F41o%2BtZyHu5mUOmegvDRyAfkR2DZoavMtCqe0hQgvC%2BndD97yUQhssAPwv8BLENc33KIOSNt7zlNAcKgd%2BSS8Z9JCiCCcA5AIBI7hHP9ABAgEgOEpwAEIrFDWE%2FCECASA4SnjAGjgMg6YqIIh4GnYGJJCcQ0EQpAFuLjyEivF4%2B4JYRQHh6e0YxRZRKYPHOVY77KVC%2FGpxbZF3TV%2BPc4pPnEj%2Bxg8AkC8SKU7swm4nHgRm8g9Z8Cb73Hf3eiICc7R8xVcQ2DOBHKTmDTyKpbvQ29HG1utFu%2F%2B2IW4tsXdaMQeYFNZAhlQ6aLSH6%2Ferv5Pt%2F%2F8EoxLiJpI7mW76AQD8ITHS95vttXCu8i2G4tP9Rx1zKC6iiVnG0yIkH4NfidDa0U3oWz7lUMGKVb%2BgIONjlkieKVY4D1plEfHI5vbvS8xuFuKwqPkXNjr5oIKuHP4G%2BqfhPi23HM6z6rlZ4Tb4dyWgnfOwRYf5BjG8vIksBLh1Vx5LhSZ18Jva0JVjq%2B%2BpJA%2B59pV9rTWJG1Q4eVcOkM4DQRgEGruPQwVo7O6QIWvhDWM3sestIPbGp36Ru9sVw6OZ9pYMc2Vwi9VMGVfjhSfbJDfq%2FXwc%2BD1bwZy8mY0MtYMHWAu5FdyhcOzkN6HcyUGlfCGQBN8sZJ1%2FQcHvaV0HpdMOd1K%2BmFlMF2LbHS68%2FD3UaV8CzYrwtOM%2B4O3WhPpDI8h1HgC9umCK3HJDIxkPta1bUDBEzQGCEcGl98GQ%2Fxje%2B7XBmPzaQ7zMZQBggtJ2SqwOvTdiMPf1su5nM9jBBadn%2BYCPAFgXFhRgjLkM7jaG1HxseF0c8e0yXtF%2BErw3M553L8sZdgNVtKNewRoVVjy2QM2ys8HummX4Awvewu1lst0PP1mf1i%2BSjhiPF695XwxAhgCcAoquGU5u8eoVUj8%2F21w1KAMF2EFs8pStfqG5fhoFwHmwe8eelPoggvuQTRtBuVsKM0J2b%2BMbq7Mh58Wv4O%2FU%2FQcL06rIQWi7EbLuhRKQ1%2B5phm7w6hxZQ3XdH42o9xYYcILfr7Jc0fXfuBMLFKCMLjIrOkfT%2FGNqLZu0PY9x1OxoM8fRHfjYxK2CHCYICQHJ%2B%2Bv2dIJUyoEtIV5WZGjMeEFU0fLUJ2506kO7qi6amExBYhaSfskA1CQkgbCIc0AyH5VUImZghpILRYNGe9iRDGhISAkBBiiJDuaDthU14QPjk8CBzvzWxDs3eDsO8nWMY0fbQ3Mx4Q6AhhBcIoQzuC8MmZ0vRRVkKe%2BU2oOyphUiG%2BmxkPWSRUCamGx8fiK0VUwsQqIQjja78NzZ4WQl63FV%2F7UQk7RHhjdJd7xSV4UuQNWhMQpoWQakgV3Kcryg55CSJcBL7P%2BJQsqYJpIiwz%2BkDFHJkVHRv83JKm7ya7r8u2eDOTdHNecCn2zvdgMzPKG5l6qIRWdzu5q8%2B5FHtXQQuAFQD7Q2j1pqRzLoXrdqIrmnglrKvhWy6HyypoeXPOckwo%2BWk08K%2F05zINfn9%2BBLvvYY64Lv1VQsu7nlzogktyb94bArwEYP8ILSHIIjRP0fweeTrGchmHrqhBd9SyS0q31Fc3lK6oUSWUXBhfdO6%2Bd%2FloDLAAoB1C67HZVD%2BAOWce7J8mYoxuiPDGwQVYhnwX8U8dtP9me1xBxA6hl7tgkSFEAVg6OI9zeNgjvHLyYcgJYg3QenPkinG5D4SSCyfnmQNELwDr686ETE95aImiGcvlit0stseXBK%2FDmVYeDwBZInJWCesPvpdIRfyc2DWYO6qAVEGnCL2MDZs3BflO3UnkbT%2FUG0rh6JwqR0MQEO7k3Nl5T8PddguxPuJ2pue%2FcHZeS6qgX4RXwd%2FCbf1kzdeIqqJUv4%2Fasxg7O7dVouNt99lnYqbOiV4oj%2B8WrLtRnsczcz0%2Fr%2B9mnAYW511XQsl18LuAO9Jz24S7r%2F0MneH7qT0JrwALAMZRCetYP9V%2FSGUsgs379IY63lsG%2F68vY0kiQoSeFpX3SakYu%2F5yqsCbNY5YIuf6DQpxIZS8DXFOZa8UY6l%2FPxblmfYKZiHOF9zINXzXUpdbwsROjwglX0P829hv9CgbSKsHxpyTxgTGKIIu%2BT43pGkLN6J5%2BDVzvgBivwiHeiHHNGN0qRTgukWAAYhPy%2BCI%2F%2FYm8EKXWLPsCGAIeX79zAxh0Au5oBmjGwd%2B6QggEA0Q1oNxnjeMIzIp9a5jgEA0QBj0whY0p%2Bu08azq%2FMDrDMQeEdbjDN5h5xfgNBw3E3ooQCAaILwJv77dQPyk0gpoARCIPSMEok%2BAcj3WhgCB2DNCIAIQiA4QAtHHGHDiDCAQe0ZYQ3wZmDW1ACg3wGuHAIHYM8I6bwLriH2lCHazoEB0jFAi64iLcP%2FD0aSdnOsNLwaAQGzkmAe4nxL5LqI8tTHGTGuplyCO%2FU5g3wCbkfPP9qHvQc8%2Fb60TBmyx3t74bxI5wOwr4sDgZ0p36XW4e8KG7ulx3U%2BZ%2BLqOHGD2EPvuju7mpDGZQPavfotw%2FFeRPAHMums6MP75chf%2Fi6p4cPVLFWCWFXHg5Dw%2BhbvJmgJn96bU9vnQ0v%2Ff3HlbZwVx4OhcZKz4RicaStz91%2FWcam%2FhOhOA2UEcODyntX7ophlj3OjYSLqebW7KGwvArCAOHJ%2FbVYYYS8X3IrQ%2FOREbwGwgWs%2BOHpITnZiQzaVGiV2HInS7FX2sAJtZhERnTWNCWKfe6XoZ4t77U7qc9Vb9Xe4MngLApCHGiHC3Os704kwigXepKNY9%2FLyUACYLMXaEuyCn4deW9F66rPW2%2B%2FJnny%2BnSRFgkhBTQribU62OAnIc%2BnkqZ9U4yp6q3UOJ4e1ZQEwc4UMwRw2QTZj7IC3v%2BftKu5lrZ7%2FrUM8RiCAkQATiYxnwOU06Oez1U4TI1xFBCEQggpAAMW%2BIIAQiEEFIgJg3RBACEYggJEDMGyIIgQhEEBIg5g0RhASIICRAzBsiCAkQQUiAmDdEEBIggpAAMW%2BIICRABCEBYt4QQUiAaAwRhASIxhBBSIBoDBGEBIjGEEFIgGgMEYQEiMYQQUiAaAwRhASIxhBBSIBoDBGEBIjGEEFIgGgMEYQEiMYQQUiAaAwRhASIxhBBSIBoDBGEBIjGEEFIgGgMEYQEiMYQQUiAaAwRhASIxhBBSIBoDBGEBIjGEEFIgGgMEYQEiMYQQUiAaAwRhASIxhBBSIBoDBGEBIjGEEFIgGgMEYQEiMYQn93e3nLJidcMt0e5PSYJ%2F44LEBIg2qaiO0romhoClN8NhASIhgC3xxqEBIiGAOUfICRANAQIQgJEY4AgJEA0BghCAkRjgCAkQDQGCEICRGOAICRANAYIQgJEY4AgJEA0BghCAkRjgCAkQDQGCEICRGOAICRANAYIQgJEY4AgJEA0BghCAkRjgCAkQDQGCEICRGOAICRANAYIQgLE%2FSB2BhCEBIh%2FhtgpQBAS8jjEzgGCkJCHIfYCEISE3A%2BxN4AS3kVByO%2BRd1%2BM%2BwIo%2BVeAAQC1yJUXfK99EQAAAABJRU5ErkJggg%3D%3D); - background-repeat: no-repeat; - background-position: center center; } - /* line 259, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing { - margin: 0 auto; - max-width: 600px; - margin-left: 52px; - overflow-x: hidden; - padding-top: 20px; } - /* line 265, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing div.st-search-summary { - border-bottom: 1px solid #f1f1f1; - margin: 0 auto 10px; - padding: 10px 0 5px; - max-width: 600px; } - /* line 270, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing div.st-search-summary h2 { - letter-spacing: 0; - line-height: 18px; - margin: 0; - font-size: 11px; - font-weight: normal; - color: #999999; } - /* line 277, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing div.st-search-summary h2 strong { - letter-spacing: 0; } - /* line 279, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing div.st-search-summary h2 .st-query { - font-style: italic; - color: #666666; } - /* line 282, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results { - max-width: 600px; - margin: 0 auto; - font-size: 12px; } - /* line 286, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result { - border-bottom: 1px solid #f1f1f1; - padding-bottom: 10px; - margin-bottom: 10px; } - /* line 290, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-text { - max-width: 600px; - overflow: hidden; } - /* line 293, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-text h3 { - letter-spacing: 0; - line-height: 18px; - margin: 0; } - /* line 297, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-text h3 a { - font-size: 12px; - font-weight: bold; - text-decoration: underline; - border: none; - margin: 0; - padding: 0; } - /* line 304, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-text .st-metadata { - text-align: left; } - /* line 306, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-text .st-metadata .st-snippet { - font-size: 11px; - color: #555555; } - /* line 309, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result .st-result-image { - overflow: hidden; - margin-right: 10px; - float: left; } - /* line 313, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-results div.st-result.with_image .st-result-text { - margin-left: 100px; - max-width: 450px; } - /* line 316, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-pagination { - padding: 5px 0 25px; - font-size: 11px; - max-width: 600px; - margin: 5px auto 20px; } - /* line 321, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-pagination a { - text-decoration: none; - color: #999999; } - /* line 324, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-pagination .st-prev { - float: left; } - /* line 326, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-pagination .st-next { - float: right; } - /* line 328, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-logo-footer { - display: none; } - /* line 330, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-logo-footer a { - display: block; - margin: 0 auto 10px; - width: 130px; - height: 16px; - background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAAPCAYAAAAs2MfGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABzZJREFUeNrsWQlsVUUUve%2F3d6F7lYJBCXXDoqhUQFms9BMLoqEtqESUSIkaMAawiMa9bSSxmgjFjSVGCi4Ji1IEE1PQzyZR9oBWwSDFElEw0I2uf%2FHc3%2FPI8P21lrSGpExy8ua9mf9m3txzz70z3%2Bn3%2B6W7FM%2FETLvqALKBR4BUIA5oBk4BXwPvAX%2FYnZ0OSxaeaZAlNU0Sh3onlx6cyzXASWANUPV%2FrYlTul8JB5bR%2BAY7PFgN53WoDQdygEyTBJbVaYZfAIwA3gA%2BB14AXmFbC%2FCtQYAwwNuVi%2BHohgQo%2FIfxm5vFurY%2FCAButCriQGCuvUA%2BPNvb5JGIzuGAGv92eryWu3j9GEgBfgKGAfuApZcUoHOLLvpT5z05WydW%2Bmix%2BvYT%2F%2BFykcgou%2BVuVQuHZbX82OyR8mavhHeOCkwAYoEThpdr%2BZ3QkgYMAv7qcgKotK1bt06Zl0vpKc3Ozq7AswzUM4L6b0bbZq2gvQCX%2Fbgv5X1wf31XCdqr2J7IMRI5xn7jPcHvPXfPZ7n0DrsExuXzRNSL2W8Q5bs0Kytrf4jvHQfEU9NF6uvFuj5VHNNmiG%2FeS3D38wSxT2CulpxaXdcsdT6%2Fxn8lUB5wG1BLuV4JTARUOhYBNZzDYGAJcBwYC4yml98IDNHpMhylcjxtnwV8D0w2CDsP2MN5DwA2ANvZPhXoB3wFTGK4WAE8yb4bgfnMb2LYfywdX8NPiZOGW6s3wK1APp5dTWPmqzGMRakwjJ1vE4Zt9rNC3uczuXHRMG72r%2BIY02C4EvYTY5zge%2FtDlQDLgQSN4SSUzseNegWJqPFVUC9oI7m981ytsVGsy3tKWD5C8Q%2FgSvkBseITxPhVOFwzvNrjk11NXomyLB3vC%2BAm5gZxNLImbVP4%2FBvgAPA20Bc4RKO%2FBgwFPgOeYf0knaEnxxtCNVAJSucztQOYKa%2BTLHM5znYS9F0qyXckj0rU48BlBqk0r3gLWAXcy3EjWI9x0HBqlIVYOJWnhZyYcDFdBkoMg6iBErH4OeYK6%2BIr%2BJ4Mw6g6Rhra0uhF2R1Uqwq%2BO4%2BGT6FKBAyPeTzN8fLaCQHwEzhKQiKMXyTe5F6y48hRqZw%2BR%2BqzJ7W2tZLHB5HwNaBe7fNJmBXwel38OuA%2BEiCNMXsH36%2FtI2l8IUFSaPC99GQ7jkTSuLt4v4j936QXa9kKJAEv0kltEuvYLoYSdYpjJI%2BTa30llUTLGCqUGvxnEsfOOyY76flq0KPqSfpChgBbft0mGeh5OVzoKv621JDrAlZnA8Wsa%2F9COxxQsosNw6gi5LdDgEGcSyIX1SZjHhMm9f5iO7S0UVo9w%2BsRR9b9Ism9pfrwIYlId0lkUqKEF70qFoztDwuE5UagyYK9wgC%2F%2BCv5vTp%2BGfEOJV63jk8wNAxjGDhBgz7IsTdSou04YxOh2c5GGEa0NBht9o5gJ9XlFhp1HJ%2Bvokfb793BXELV5g5%2B8wi2RVBNkjhWLwc%2FyEU2K5tm05vMrLnQkPYcwwgBMpAU7ZUEgyQpBlGExnQRbSoA52ArgJtkqjDIUNjOHOJalyFSfGtXivfhLEj%2FQbmqTx9JmD9PwlH3h4fbfTUBqzPyvl8oqZ%2FoppFxehsN7iZhVEEf4uIvpQEe4%2B%2FL2piTFWJHFirb9DBv0DKTJNjCeUWG2Nl5jK1lhEGAK6gcHwIfOOmpKZx8MT06ZGGyONWIz1uYreaaIYB9xZB5NVAuni2n8RbwdzYJjhlJYFvDVxl9KoISzmqO3d4ByrlFturPirdXb2kcOlziFxdL5L5d4o%2BJNfseRq%2BWcuwAapEAOi1JpkdOoQeVMW4PYAzebeQYa6gAuuA3AJVs%2F68lzDiziKZyNFFp9dxgFNtXhCCM%2FY1jedUQ86tBhuepEPoNSU56lB6MnDGMpbBVwB3kqbrwE4zsvx9JEWy5KhrZlukUSrXd5upgDpCBsfyGGuRdwK5H43eyffDTMGqMRLvLpMemL8UfHRPcd6suayWSQM0D4i3rHi74GRIuhQnVNsMZlAC%2FMXYLDd%2BXu4UawwtNQzkMY9vlOK%2Fp3G28T6%2Ffy9g%2BkonoBuM3XhJnPeW9N3OD%2BTT8s0wqjwCnmQvs6%2FRzzX8r3A0kmlu8riqhdgGeiZnuAIE1zsfGScOIURJdxjU8fwuoCzQYe%2BSKt6oaZFlNE9Jlqz%2BePQrczFByUCWUVzsBnEVj2545g3nBRwZR5nDrt5p5wUy%2BcwN3GcKdwXM8kKqlc33Ktpe5q9AQM91INneSTGtIjiPcotrnDalU6oEkS7mSxepm%2FwXMCWyJ8M3%2BqKiACljNUPWwsOCuKrNF%2Bh%2FAqtomKTjd0BX%2FAVxoUZKMp4JuNgiw29hO7rl0FBy6LA54GjI7S88BWlqCje%2FjwUuR%2BeAiKS4adjzPAba2YccOne52t6PgeuCBQHJqWZlACtegmlustUaecrGVWMr4euY%2FJjc1TGzi9c%2BOvPRvAQYAgFh4Ih%2BROgcAAAAASUVORK5CYII%3D) no-repeat; - background-size: 130px 15px; - text-indent: -9999px; } - -@media only screen and (-webkit-device-pixel-ratio: 2) { - /* line 340, ../sass/_swiftype.sass */ - div.swiftype div.st-result-listing .st-logo-footer a { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPIAAAAeCAYAAAAW7kNdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAEP1JREFUeNrsXQl0lNUVvrOE7CEKIiiVIOoB1ygFESoET7F1Y7FV29oKuB5aUdKqPaAVqLa1iyLValsXovUUpSqhqK2KiooVlSW4sSlGFGWRMEBCJplkpvdmvkduXt4%2FmcGAiWcu557JvP%2F9%2F3v%2F%2B99373fve%2F%2Fgi8VilJaOLQ3nj0p0uDvr8awjWAew9mI9iDWDdTfrDtZNrO%2Bzvsz6LmttW20G%2FT56ZU%2BErtpWQwX8dyeTIOvBrH7WCMah%2Fus8R4JpmHRayWW9hHU862DWZNAWZn2R9XZ8fh3lItYLWPtgfu9h3cr6LOvfWaNpIKelo8hRrHezfifF87JYz2Ydxno16yOd6J67sk5kzWYVGhlg%2FTfrO6qOGLX7wEZchu9vaY%2Bclo4iRayPsg5MqnaEmWVGhgsUs1k3sr7i6fKZUnegwKsH6x%2BtObtNAVmAfY0DxNWsXVhXwADY4sM5EY%2FjaSCnpd1FvNG9yYGY52cDz81ehxNt5%2FkeZUbpa8G%2BJYa8jnUZ6OdekcCyNhqj8pp6yvJ1mPi4EbF9viqrtwxckXXOIoBfxm2NKu%2FN%2Bj18Hg7qPTWZ3EEayGlpD7mc9btJgbh6F%2FlLRhEd0oOi5fOIMrNcFc9i7Q9v1cJFNcYYyNX1Hckr%2BxzzNcMyTPbx11mfc1zrVNY71ffVrDelqXVaDhS1%2FFnb053n%2B%2B5d5BtwPPkum0TRW27kMj9wEHM9%2F2%2FZQBZZUx%2Bl7I5FrTezXgyabIC91AK6TR8yPa7V3UG%2FY2kgp%2BVAiCSpjmqzVm0N0aG9KHD9zRRbu5piH6wjyslJNE9PY%2F1zC1vg99MfQjUUZq%2Bc3XGoNd8YzU9wvMFxk40edbtZ32MJ6qaBnJZ2kwxQ6kBCT1xXxz4ohwKl0zj6O4Ki99yRzKLU4fpLgL3wvN1h2tDQSJmtQXwk6ygVi%2B6i%2BPr0ctbPKL60kw9PaEBVa8fguI9s1JNzQhYIxesWoMwHjylLZ7I%2BngXNRWy7FfV7ILzXkgfNUdeQRF9fBw4Oofh6cwD1YmgjqsBe5UH5D1KMIIJ7%2FgbGIgfXeRkxvZSdwVoM4%2FEGxROOdW2wsZMovk9A7vVjhA2f7r0BHx7WggUL5OFMoPjGApFKaXzMmDFlpjLqFCWaFVx%2FsV3G503hj0J5YHz8TsfxCQmuW6n7YJ0n51yLQRGpkGK7D1xvBv5c7Dhm2k7UTgl%2FlHj1j7Wczw1xPbnHKV79VmPc1NfRo0eXJwnknqyDEtaQ7DR7UP9PS8l3yiCKvb2SYqvf5cfepa1r52MiNxh7sLkhSqHGGHUL%2BHT8eQvrjwEw25vtZF3C%2BgPE8b8CGAKYwBdadPcvFF866wIDcCbFM9BGbkYYEQYwfohxfh2gCALMkqBia0W3sk52UGnpy0Vo53rWT1gfdFDrEwCoGIymLO29yfowwBYFSC9BAk3LODCaAPol%2FVnI%2Bgyem4lpjgej%2Bj3rcSoMkOu%2FwDqJdYN1bVkL%2FyUSc92UIZfryUaf%2B%2FBcaoJqMs9xPOQJfGw8T8iR5jvr9CSSEvbknaW%2BC5gqrHPGJwCKnCNgHSlgscBp90WuMYWPlXHdiapc11vs0baUl3l0oaSN%2B57FbUr%2FKvizqwEz%2F11pGY7pCsh9U%2FDIvWHh3RJtbPLG%2FksnkX%2FU2fEn%2Ffqr7IPYweTnt3XtLANkP6N4I8fGb9Y1Ul7zbq4CjMt5CZ53IcAg8gG84EH4fjq84E58P5HiGzYKlLfpo4BcCHAU4vsGeKA8xxiYid0P92FLNtRQc2EUh3kwnl7WeSvhoY9U5aMdQD7PYjUvwXDkqmScGALJno%2Bklll3cw9iyO5H8rFOjdNc1mM9xvxggFzamOqHF5mlPNo4NGi8RQk8qi2LPdSWax3AoQTebaZSc71i5emM4THAKnf0eYLywu0tun%2FlavJdq46HbAMCr25APJMBXplCmwPJvcmhyQtTTTX5x15A%2FgsuRlpoE%2FlfWcQzJEa%2BcJh1T3wpqg3DK9j9oL6RXgtHKKvZHF9ogVi8wXt4Nqsx2UX%2BBbAITdyo6hdYsf0Ih1cfqv42FNLIa6CQGYY1aBOGzxDabpUxYP0C%2FVkParuNWu%2FuakC9raDPYji2wFOS1fdc9V0MyzD1fSk8e8Bqww8jkI8%2BueLxkciDmJBgjgViCQ2ehKfX1xbmcmIQIDHWr1R5kMU8%2BVbi%2BBhqma4n5aXbkrHKSBTje2kCGj3D8samDyO0B1RUeZw2Llx%2FPtoQg9HuYE7QvyIcF4pdigchRnACKPYsZazuTLHZYzyPsNf1lYwi%2FxVX83SJh4hVa9fQ1kgj5fbrT926dacY0%2BtA1XYKVn7IU6xVmN2o49MMBrCsHceaQW5v9H5OTbgu8GTidVehTDzvu%2FCSxrsNRhydDZpoy3CVcBttsbrXFBjIwyMLLZ3H%2BjhAYES83DRQ7hC8rIBTNtScquq9A2dQjWsa9rCA9TLV9tGsQxTAT1f3aYxZzKOvn4NWPwMGchu13g8wFgm9H7Geosp3ILx4DmMzE%2Fflx72d48fE0hRxLLy0TMqTWX0pgNamxGNV7GuobhHKk5WQ%2FoRnM4ZntqN%2BKazbxP2dgcI4mb68rMBeBsNlxnSKiuNLdYiQpPRyg3gX%2BQaeSoHJNzA5jjvsaDRKCys%2FpZfOPJ%2BqrplKO2%2BYTjumTKOG3keQL%2BL0yvUOT6e9tU1ZD8O9RBHDfoRYcpWq84J1jUEqnDjZ0c6xoPeZoJdGqijBzjMF%2BHp4VNvTVkO3w2A1wuvaGz8i8MDbcdzQ21etuDUb4DWG5dsKtHL%2Bs67wElKG%2Bboe9Px6JAvtmJgQemh5BteO4R7nop9GjgsKxZOYErSv2KT4uawC9Gm2iwbycdd6xkzLY40x9BfxY4Xy8K5ETyGAqmPTEgu0JQow5Q6PWWkZJy3T%2BfrTvyR4X1JfTfKv3OFlSxEvFVoMonwfmj24VUkdU%2BbjTqLA1F8zUe26t%2FjDDRsoMyuLhpcMoTwur%2FcHKH%2Few5Tz4rMUzXQuq%2B5JsPQSxeS2E0P%2FAY18GfPlI6vO8wBDpsp2m8RQpvJQAcTIveHZcq04eBXoezIScAAo4FHP7zAIrrq78Gyvs%2BZkNrLRw1W5GJw1Cfpnj%2FHrqD9Ylck1D3UY7hASZ5kwWgfB%2BBjp7sfkn4hB1pPMxKUfISbdF281QVEUkYdUDFvoOK0Yk9%2BoAd1EVzb8K5ISpUWqbKwje28nz%2FaVJXRzuqMTiim2bUs8Q%2F32irhWV9PQoUMpLyeH6phGZy96mvLmP0qxjOBe6m3JzjbanuMAcw9Q4NvBPO62kkifwvPorHtPMCUj97A%2BpTLnJ%2BO4psavdoDn%2FYwFQonhjwD17acM3gJKvBZtD37YMa5iUA5xsCDJvq9FCCCG7b%2BWwcsIWt6tXNHXMQCiAG4Ol5VbE7WtFUo9sUO4Zsg6XuZIdj1kJRdKQE8Xw9vqzHWRzRZgIIoVmBIxBuNhS1KIkX1WW7MwTtLHcos2lypjVpZigqsFU2lVkplF0YVPsD98LD4DwrUU6XsMdZ12K0XZI9dxXJy5fCnlP3J%2FE4BjGV3iibHWsrWNtgVMsqx0o8c4FSDh8k3MmS3w8i9hycUA%2F1IV64tXkTevzkG5yGmWMYjA83%2FVshw6WD2LIVZC7mNybwVNVeqp%2BSWOFk%2BbvHepNWXkgzz5ZmHiV%2FBEK1UAkMSRoU6kYrxkRWer53scL0uU7AJQPsLgTUDyqlxR1RLHNaarDPd%2B3ZaExNZDyuAV68w9juuHva%2BS7RkiBoJNAPXxv7ohwyhSeDD5%2FD7KXL%2BWCu%2B%2Fi%2Fy1YYplZ3uBmJCYap4xPuceMInp3oIXOhfj3h9U0MipOPYAPJTMnckK7KXKIC3FeKxFXT%2By43rRW4693wGALPT6RYsCT4bnNLKQWq6DJxsK2Nn7KjAkn4MV3WuNt%2Fb0m%2F0KEFMcFHqE5S2TpdVFCvhl1HLJxgCvGPUSAkUljfqoGHixSiQVq3aLlQcs399PGIZmvCMxd2BEdm%2Bwt%2FVFo9TYoyeFBw1r2gAS2PI5Fdw3m%2FxfbKMYe2dK%2FCsw7xiL18DV1kSiXtv9dsLL%2FgKgHekAml5PXQ%2FvbCZtd2reSTgfiZvVKq7saeUChAnsPkAj2Zgg4UdgBrovA0GvDa1%2BLMk2tBxDLdeoRdYhQx12sJ63YBxtlWeyOghwaQo9HaAtUjFgGZJibSW7CA%2FYJLlC1sYMO3Y2XjaRVKrEko41V6LPK5FECynqFyLvJa4vC16v%2By53bHRpL0m8ob8hQvUDTqBInyPJv2M7db3vrqalplheXltn7jZMQSx6VWOUZoVqm954UnIZvM%2FzYEdVmPRyr5uo5VrnTgvIK6wsNCEuXKISXmuo9aYHs9tpf7zI4HPEqzkASzXCgC0WmOQ%2B3gOltkXuZVkS7XaxQqWfW0mtBhgEeSayA%2B1odUxCkKnwyiGVAJXQRZYHn%2FTD652sPGWRSuSEEFemmqQZ6%2BUV0Z4pH5%2FEtT62gQyv3Fd7dwVi8dYjv0Q8mqpUYIzG7cc2vD29eNtgBu0548wmD9217K%2BUWfEWxXJyk4HBKoBp7wxXa8iELLIA%2BXdI%2BixBdvZp1v9ZMXOYWi4V1SK2JEe2tkJ5s1WOOptsyt%2BO0kCt934PQPjwGmj0udZxAfizHtd7gpL7PbCJGLd5aONy67hsHX0Tf99vHZPk12%2FAUp7HOL%2BKBJu8fnmlz%2BFxSpQ3raAOLjq5hTg%2FRJ1Ekv3hw4bzR3km5Hx1YYoccyx9MeNPVDB3DuU%2BOZdBnOOVobZlpmFEAWSXSjbtaprpmBj9Ad5uSVxLkmG%2Ftcoks%2F0ktVzauRxxtJHhAEmWFXOOs%2BhoMViYV5tDABCdT7gDoYAt0wAMSgDO71tlp2As9PU%2FAwNdZ9UdgnvonuRUkA0qk5TBluGXnyW6IsnzVwQdk2lxqhPtK5ZQJ%2BxzqvKJd%2BQVpZpR51DOkhcod%2BHjPM2ykwXxblL7huXlmX%2FsClMdj1%2Bw%2Ba2nnWBPw5CjsJNuEYDrQXL%2FHtYSeNajQJPF%2Bz9l1XkbQOhHzbvMnnfElI141n7UyaSWGzsaQPvNW1NBh%2BfVyaOTEAJmWiGM2RhCjn6%2BYRlUyVR%2FmOQzrIXnzlB9fR8gfszy6jEk1GQzykUwqFmOJNwGjPH89GuMnUMELD9p5Y3D7I2P7k8%2BjpFlmSkW4DkeDLaV3DIiMehSbQD7ZQQoAGrta45hr0QSS7yyrF32Rrwnk30tchheGVuZrOdT8%2F7kPSoBpg3xONSJQTc6rrUOBsVYmSAouJH3EC8GqPnH%2BTZ79Otz5GeOQ9IpD4ZtI%2B7lcw9KvkwBuQFUOdn3mGX3213UvA%2B7Bv3z%2Bnkh2VBzG8LHXggtu8N4fgb9wtxjGsidQxYhTstrUSo%2FqheNUh7Tad%2BePfFXFpMDcQ3i3haZ2kGZgaZZZs3MKBjBJyq2TUU2tFOdOkq8HCWAWJ1Cv2oBzGVJ1peE2NmWYVmUQnubYWxSlc3QlYkq%2BdMY6RSynpp3xzXzL%2Fa%2BwU0fk39HVTLvHWu5SSVWmpGS%2Fr8KEskVoLg6jk8lH5OxPzuX9sidQ8JI6sjrfn1VtoxNcSDVa%2F2a3C%2BbpKW1yFhLRluSdhcrxyfx7D87UkfTHrnziNDKS5B02ReRZTzZDjmdOvkPzR1Akd2Hkpy7ygprHtiH57BfdxmmPXLnEslQngVASrwmyZqCBPVDiMtkk728%2BvZheghTkhUOAMo7xzOSwFWuVRZIAzktWiRbKb9RJbt8ZFtjP2hXTBazTCNxtezEkkRJVXrY9kmWU%2FMvi8gymvwXNbK9tK0fspfE4C1gPuY%2F0ntzf3b0%2FwIMAMzueRjRzYtvAAAAAElFTkSuQmCC); } } -@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) { - /* line 344, ../sass/_swiftype.sass */ - div.swiftype { - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; } - /* line 350, ../sass/_swiftype.sass */ - div.swiftype .st-input-inner { - padding-right: 0 !important; } - /* line 352, ../sass/_swiftype.sass */ - div.swiftype .st-input-powered-by { - display: none !important; } - /* line 354, ../sass/_swiftype.sass */ - div.swiftype .st-result-listing { - margin-left: 15px !important; - margin-right: 15px !important; } - /* line 357, ../sass/_swiftype.sass */ - div.swiftype .st-result-wrapper .st-result-listing .st-logo-footer { - display: block; } - - /* line 359, ../sass/_swiftype.sass */ - #st-launcher-tab { - right: 20px; - width: 0; - padding-left: 13px; - text-indent: -99999px; } } -/* line 365, ../sass/_swiftype.sass */ -.swiftype-widget .autocomplete { - font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; - background-color: white; - display: block; - list-style-type: none; - margin: 0; - padding: 0; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); - position: absolute; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - text-align: left; } - /* line 382, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete ul { - font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; - background-color: white; - display: block; - list-style-type: none; - margin: 0; - padding: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - text-align: left; } - /* line 395, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li { - border-top: 1px solid #e5e5e5; - border-bottom: 1px solid white; - cursor: pointer; - padding: 10px 8px; - font-size: 13px; - list-style-type: none; - background-image: none; - margin: 0; } - /* line 404, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li:first-child { - border-top: 1px solid white; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - -ms-border-radius: 3px 3px 0 0; - -o-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; } - /* line 411, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li:last-child { - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - -ms-border-radius: 0 0 3px 3px; - -o-border-radius: 0 0 3px 3px; - border-radius: 0 0 3px 3px; } - /* line 417, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li.active { - border-top: 1px solid #145a93; - border-bottom: 1px solid #086aa8; - background-color: #1285d5; - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #37a3e9), color-stop(100%, #1285d5)); - background: -webkit-linear-gradient(#37a3e9, #1285d5); - background: -moz-linear-gradient(#37a3e9, #1285d5); - background: -o-linear-gradient(#37a3e9, #1285d5); - background: linear-gradient(#37a3e9, #1285d5); - -webkit-box-shadow: 0 1px 0 #69bdf3 inset; - -moz-box-shadow: 0 1px 0 #69bdf3 inset; - box-shadow: 0 1px 0 #69bdf3 inset; } - /* line 429, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li p { - font-size: 13px; - line-height: 16px; - margin: 0; - padding: 0; - overflow: hidden; } - /* line 435, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li p.title { - font-weight: bold; - color: #1c6cb5; } - /* line 438, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li p.title em { - color: #0b2644; - font-style: normal; - font-weight: bold; } - /* line 442, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li.active p.title { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - color: white; } - /* line 445, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li.active p.title em { - color: white; - font-style: normal; } - /* line 448, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li .sections { - color: #999999; - font-size: 11px; } - /* line 451, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li .sections em { - color: #666666; - font-style: normal; } - /* line 454, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li .sections .section { - display: inline; } - /* line 456, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li.active .sections { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - color: #a9d7f1; } - /* line 459, ../sass/_swiftype.sass */ - .swiftype-widget .autocomplete li.active .sections em { - color: #a9d7f1; - font-style: normal; } - -/* line 463, ../sass/_swiftype.sass */ -form input.st-search-input { - font-size: 12px; - padding: 4px 9px 4px 27px; - height: 20px; - width: 200px; - color: #666666; - border: 1px solid #cccccc; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - -ms-border-radius: 15px; - -o-border-radius: 15px; - border-radius: 15px; - -webkit-box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.17); - -moz-box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.17); - box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.17); - outline: none; - background: #fcfcfc url(//swiftype-assets.a.ssl.fastly.net/assets/embed_mag-034de95a159bfc65ae00bd318e8138ed.png) no-repeat 7px 7px; } - -@media only screen and (-webkit-device-pixel-ratio: 2) { - /* line 482, ../sass/_swiftype.sass */ - form input.st-search-input { - background-image: url(//swiftype-assets.a.ssl.fastly.net/assets/embed_mag@2x-3a6ad2f01c9cbb5c710ad5d949c051b8.png); - background-size: 15px 15px; } } -/* line 486, ../sass/_swiftype.sass */ -.st-modal-open { - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; } - -/* line 494, ../sass/_swiftype.sass */ -.st-modal-scrollable { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - overflow: auto; - -webkit-overflow-scrolling: touch; } - -/* line 503, ../sass/_swiftype.sass */ -.st-modal { - left: 50%; - top: 50%; - width: 950px; - margin-left: -475px; - z-index: 99999; - outline: none; - position: absolute; - margin-top: 0; - overflow: visible; } - /* line 513, ../sass/_swiftype.sass */ - .st-modal.fullscreen { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin-left: 0; - width: 100%; } - -/* line 522, ../sass/_swiftype.sass */ -.st-modal-body { - max-height: none; - overflow: visible; } - -/* line 526, ../sass/_swiftype.sass */ -.st-modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 99998; - background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(5%, rgba(0, 0, 0, 0.3)), color-stop(100%, rgba(0, 0, 0, 0.7))); - background-image: -webkit-radial-gradient(50% 50%, ellipse cover, rgba(0, 0, 0, 0.3) 5%, rgba(0, 0, 0, 0.7) 100%); - background-image: -moz-radial-gradient(50% 50%, ellipse cover, rgba(0, 0, 0, 0.3) 5%, rgba(0, 0, 0, 0.7) 100%); - background-image: -o-radial-gradient(50% 50%, ellipse cover, rgba(0, 0, 0, 0.3) 5%, rgba(0, 0, 0, 0.7) 100%); - background-image: radial-gradient(50% 50%, ellipse cover, rgba(0, 0, 0, 0.3) 5%, rgba(0, 0, 0, 0.7) 100%); } - /* line 538, ../sass/_swiftype.sass */ - .st-modal-backdrop.fade { - opacity: 0; - -webkit-transition: opacity 0.3s; - -moz-transition: opacity 0.3s; - -o-transition: opacity 0.3s; - transition: opacity 0.3s; } - /* line 544, ../sass/_swiftype.sass */ - .st-modal-backdrop.fade.in { - opacity: 1; } - -/* line 548, ../sass/_swiftype.sass */ -.st-modal-overflow.st-modal { - top: 20px; } - /* line 550, ../sass/_swiftype.sass */ - .st-modal-overflow.st-modal.fullscreen { - top: 0; } -/* line 552, ../sass/_swiftype.sass */ -.st-modal-overflow .st-modal-body { - overflow: auto; - -webkit-overflow-scrolling: touch; } - -/* line 556, ../sass/_swiftype.sass */ -.st-animate { - -webkit-animation-duration: 0.3s; - -moz-animation-duration: 0.3s; - -o-animation-duration: 0.3s; - animation-duration: 0.3s; - -webkit-animation-fill-mode: both; - -moz-animation-fill-mode: both; - -o-animation-fill-mode: both; - animation-fill-mode: both; } - -@-webkit-keyframes modalEnter { - /* line 567, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 574, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -@-moz-keyframes modalEnter { - /* line 584, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 591, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -@-o-keyframes modalEnter { - /* line 601, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 608, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -@-khtml-keyframes modalEnter { - /* line 618, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 625, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -@-ms-keyframes modalEnter { - /* line 635, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 642, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -@keyframes modalEnter { - /* line 652, ../sass/_swiftype.sass */ - 0% { - opacity: 0; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); } - - /* line 659, ../sass/_swiftype.sass */ - 100% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } } -/* line 668, ../sass/_swiftype.sass */ -.modalEnter { - -webkit-animation-name: modalEnter; - -moz-animation-name: modalEnter; - -o-animation-name: modalEnter; - animation-name: modalEnter; } - -@-webkit-keyframes modalExit { - /* line 675, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 682, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -@-moz-keyframes modalExit { - /* line 692, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 699, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -@-o-keyframes modalExit { - /* line 709, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 716, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -@-khtml-keyframes modalExit { - /* line 726, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 733, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -@-ms-keyframes modalExit { - /* line 743, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 750, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -@keyframes modalExit { - /* line 760, ../sass/_swiftype.sass */ - 0% { - opacity: 1; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); } - - /* line 767, ../sass/_swiftype.sass */ - 100% { - opacity: 0; - -webkit-transform: scale(0.4); - -moz-transform: scale(0.4); - -ms-transform: scale(0.4); - -o-transform: scale(0.4); - transform: scale(0.4); } } -/* line 776, ../sass/_swiftype.sass */ -.modalExit { - -webkit-animation-name: modalExit; - -moz-animation-name: modalExit; - -o-animation-name: modalExit; - animation-name: modalExit; } - -/* line 4, ../sass/_exceptions.sass */ -#type-encodings tr > td:first-child, #method-encodings tr > td:first-child { - width: 12em; - padding-left: 3em; } - -@media screen and (max-width: 480px) { - /* line 9, ../sass/_exceptions.sass */ - #gpuimage table { - font-size: 50%; } } -/* line 14, ../sass/_exceptions.sass */ -#gpuimage #gpuimage-benchmarks td { - text-align: center; } -/* line 17, ../sass/_exceptions.sass */ -#gpuimage #gpuimage-benchmarks td:first-child { - text-align: left; } -/* line 20, ../sass/_exceptions.sass */ -#gpuimage #gpuimage-benchmarks td:last-child { - text-align: right; } -/* line 24, ../sass/_exceptions.sass */ -#gpuimage #gpuimage-filters td { - vertical-align: top; - font-size: 75%; } -/* line 27, ../sass/_exceptions.sass */ -#gpuimage blockquote { - font-size: 75%; } - -/* line 31, ../sass/_exceptions.sass */ -table.core-data-versus-nskeyedarchiver td { - text-align: center; } -/* line 34, ../sass/_exceptions.sass */ -table.core-data-versus-nskeyedarchiver td:first-child { - text-align: left; - font-weight: bold; } - -/* line 38, ../sass/_exceptions.sass */ -table#xcode-key-bindings-modifiers { - width: 100%; } - /* line 41, ../sass/_exceptions.sass */ - table#xcode-key-bindings-modifiers td, table#xcode-key-bindings-modifiers th { - width: 20%; - text-align: center; } - -/* line 46, ../sass/_exceptions.sass */ -#cfstringtransform table { - display: block; } - /* line 49, ../sass/_exceptions.sass */ - #cfstringtransform table td:first-child { - width: 60%; } - -/* line 53, ../sass/_exceptions.sass */ -#icloud header time { - background-color: rgba(255, 128, 0, 0.2); } - -/* line 36, ../sass/screen.sass */ -html, body { - font-family: "Georgia Pro", Georgia, serif; - margin: 0; - border-top: 3px #ff8000 solid; - background: #f8f7f5; } - -/* line 42, ../sass/screen.sass */ -[role="container"] { - max-width: 100%; - margin-left: auto; - margin-right: auto; - max-width: 960px; - margin: 0 auto; - padding: 2em; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - [role="container"]:after { - content: ""; - display: table; - clear: both; } - /* line 49, ../sass/screen.sass */ - [role="container"] section { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; - margin-bottom: 2em; - padding-bottom: 1em; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - [role="container"] section:after { - content: ""; - display: table; - clear: both; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - [role="container"] section:after { - content: ""; - display: table; - clear: both; } - -/* line 56, ../sass/screen.sass */ -[role='banner'] { - display: block; - margin-bottom: 2em; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - [role='banner']:after { - content: ""; - display: table; - clear: both; } - /* line 60, ../sass/screen.sass */ - [role='banner'] #logo { - float: left; - display: block; - margin-right: 2.35765%; - width: 23.23176%; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - font-size: 1em; - position: relative; - height: 6em; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role='banner'] #logo:last-child { - margin-right: 0; } - @media screen and (max-width: 768px) { - /* line 60, ../sass/screen.sass */ - [role='banner'] #logo { - margin-bottom: 2em; - height: 5em; } } - /* line 71, ../sass/screen.sass */ - [role='banner'] #logo a { - display: block; } - /* line 74, ../sass/screen.sass */ - [role='banner'] #logo svg { - width: 70%; } - @media screen and (max-width: 768px) { - /* line 74, ../sass/screen.sass */ - [role='banner'] #logo svg { - width: 100% !important; } } - /* line 79, ../sass/screen.sass */ - [role='banner'] #logo svg#ns { - position: absolute; - width: 70%; - top: 0; - left: 0; } - /* line 85, ../sass/screen.sass */ - [role='banner'] #logo svg#mustache { - position: absolute; - width: 70%; - z-index: 100; - top: 0; } - /* line 91, ../sass/screen.sass */ - [role='banner'] #logo svg#mustache:hover { - animation: twirl 1s ease-in-out; - -webkit-animation: twirl 1s ease-in-out; - -moz-animation: twirl 1s ease-in-out; } - /* line 94, ../sass/screen.sass */ - [role='banner'] nav { - float: left; - display: block; - margin-right: 2.35765%; - width: 40.29137%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role='banner'] nav:last-child { - margin-right: 0; } - /* line 97, ../sass/screen.sass */ - [role='banner'] nav li { - display: block; - float: left; - display: block; - margin-right: 10.1484%; - width: 26.56773%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role='banner'] nav li:last-child { - margin-right: 0; } - /* line 101, ../sass/screen.sass */ - [role='banner'] nav li a { - font-size: 1.5em; - display: block; - text-align: center; - padding-top: 14px; } - /* line 108, ../sass/screen.sass */ - [role='banner'] nav li a.current { - padding-top: 10px; - border-top: 4px #ff8000 solid; } - /* line 112, ../sass/screen.sass */ - [role='banner'] nav li a:hover { - padding-top: 10px; - border-top: 4px #ffc080 solid; } - /* line 116, ../sass/screen.sass */ - [role='banner'] form { - float: left; - display: block; - margin-right: 2.35765%; - width: 23.23176%; - margin-left: 8.5298%; - margin-right: 0; - float: right; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role='banner'] form:last-child { - margin-right: 0; } - /* line 122, ../sass/screen.sass */ - [role='banner'] form input { - height: 2.5em; - width: 100%; - margin-top: 1em; } - @media screen and (max-width: 768px) { - /* line 127, ../sass/screen.sass */ - [role='banner'] #logo, [role='banner'] nav { - width: 100%; } } - @media screen and (max-width: 768px) { - /* line 131, ../sass/screen.sass */ - [role='banner'] form { - display: none; } } - @media screen and (max-width: 768px) { - /* line 56, ../sass/screen.sass */ - [role='banner'] { - margin-bottom: 2em; } } - -/* line 141, ../sass/screen.sass */ -#latest article { - font-size: 125%; } - -/* line 145, ../sass/screen.sass */ -#recent article { - float: left; - display: block; - margin-right: 2.35765%; - width: 31.76157%; - min-height: 15em; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - #recent article:after { - content: ""; - display: table; - clear: both; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - #recent article:last-child { - margin-right: 0; } - @media screen and (min-width: 769px) { - /* line 151, ../sass/screen.sass */ - #recent article:nth-of-type(3n) { - margin-right: 0; } } - @media screen and (max-width: 768px) { - /* line 145, ../sass/screen.sass */ - #recent article { - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; - min-height: 12em; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - #recent article:last-child { - margin-right: 0; } - /* line 158, ../sass/screen.sass */ - #recent article:nth-of-type(2n) { - margin-right: 0; } } - @media screen and (max-width: 480px) { - /* line 145, ../sass/screen.sass */ - #recent article { - width: 100%; - min-height: 7em; - margin-bottom: 1em; } } - /* line 166, ../sass/screen.sass */ - #recent article p { - display: -webkit-box; - overflow: hidden; - -webkit-line-clamp: 5; - -webkit-box-orient: vertical; - text-overflow: -o-ellipsis-lastline; } - -/* line 170, ../sass/screen.sass */ -#popular article { - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - #popular article:last-child { - margin-right: 0; } - /* line 173, ../sass/screen.sass */ - #popular article:nth-of-type(2n) { - margin-right: 0; } - @media screen and (max-width: 480px) { - /* line 170, ../sass/screen.sass */ - #popular article { - width: 100%; - margin-bottom: 1em; } } - /* line 180, ../sass/screen.sass */ - #popular article p { - display: -webkit-box; - overflow: hidden; - -webkit-line-clamp: 5; - -webkit-box-orient: vertical; - text-overflow: -o-ellipsis-lastline; } - -/* line 187, ../sass/screen.sass */ -section h1 { - margin-bottom: 1em; } - -/* line 190, ../sass/screen.sass */ -[role="article"] { - font-size: 125%; - margin-bottom: 1em; } - @media screen and (max-width: 768px) { - /* line 190, ../sass/screen.sass */ - [role="article"] { - font-size: 100%; } } - /* line 197, ../sass/screen.sass */ - [role="article"] table { - overflow: scroll; - margin: 2em 0; } - /* line 201, ../sass/screen.sass */ - [role="article"] table caption { - margin: 2em 0 1em 0; - font-size: 1.5em; } - /* line 205, ../sass/screen.sass */ - [role="article"] div.highlight { - border-radius: 0.25em; - overflow: scroll; - padding: 0 1em; - margin-bottom: 1em; } - /* line 211, ../sass/screen.sass */ - [role="article"] header { - text-align: center; - margin-bottom: 3em; } - /* line 215, ../sass/screen.sass */ - [role="article"] header h1 { - font-size: 3em; - line-height: 1em; - margin-bottom: 0.5em; } - /* line 219, ../sass/screen.sass */ - [role="article"] header h2 { - font-size: 1.25em; - font-family: "Georgia Pro", Georgia, serif; - font-style: italic; - font-weight: 300; - color: #a3a39e; } - /* line 226, ../sass/screen.sass */ - [role="article"] header h2 time { - color: #64645e; - white-space: nowrap; } - /* line 230, ../sass/screen.sass */ - [role="article"] .content { - margin-bottom: 2em; } - /* line 233, ../sass/screen.sass */ - [role="article"] .content h1, [role="article"] .content h2, [role="article"] .content h3, [role="article"] .content h4, [role="article"] .content h5 { - margin: 2em 0 1em 0; } - /* line 236, ../sass/screen.sass */ - [role="article"] .content hr { - width: 40%; - margin: 2em auto; } - /* line 240, ../sass/screen.sass */ - [role="article"] .content img, [role="article"] .content object, [role="article"] .content embed, [role="article"] .content figure, [role="article"] .content svg { - margin: 1em auto; - display: block; - width: auto; } - /* line 245, ../sass/screen.sass */ - [role="article"] .content ul, [role="article"] .content ol { - margin: 1.5em 0; - padding: 0 3em; } - /* line 249, ../sass/screen.sass */ - [role="article"] .content ul li, [role="article"] .content ol li { - list-style: disc; - margin-bottom: 1em; } - /* line 253, ../sass/screen.sass */ - [role="article"] .content figure { - text-align: center; } - /* line 256, ../sass/screen.sass */ - [role="article"] .content del { - color: rgba(34, 34, 32, 0.5); } - /* line 259, ../sass/screen.sass */ - [role="article"] .content ins { - background-color: rgba(255, 128, 0, 0.2); - text-decoration: none; } - /* line 263, ../sass/screen.sass */ - [role="article"] .content blockquote { - margin: 2em; - margin-right: 4em; - border-left: 3px #ff8000 solid; } - /* line 268, ../sass/screen.sass */ - [role="article"] .content blockquote cite { - margin-top: 1em; - display: block; } - @media screen and (max-width: 768px) { - /* line 263, ../sass/screen.sass */ - [role="article"] .content blockquote { - margin: 1em 0; } } - /* line 276, ../sass/screen.sass */ - [role="article"] .content table th { - text-align: center; } - /* line 278, ../sass/screen.sass */ - [role="article"] .content table td { - padding: 1em; } - /* line 281, ../sass/screen.sass */ - [role="article"] sup { - font-size: 50%; - margin-right: -0.5em; } - /* line 286, ../sass/screen.sass */ - [role="article"] footer .contributor { - float: left; - display: block; - margin-right: 2.35765%; - width: 48.82117%; - border-top: 1px #cccccc solid; - padding: 1em 0; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role="article"] footer .contributor:last-child { - margin-right: 0; } - /* line 52, ../sass/neat/grid/_omega.scss */ - [role="article"] footer .contributor:nth-child(2n) { - margin-right: 0; } - /* line 57, ../sass/neat/grid/_omega.scss */ - [role="article"] footer .contributor:nth-child(2n+1) { - clear: left; } - /* line 292, ../sass/screen.sass */ - [role="article"] footer .contributor:only-child { - width: 100%; } - /* line 295, ../sass/screen.sass */ - [role="article"] footer .contributor:only-child .avatar { - padding: 0 1em; } - @media screen and (max-width: 480px) { - /* line 286, ../sass/screen.sass */ - [role="article"] footer .contributor { - width: 100%; - margin-bottom: 1em; } - /* line 302, ../sass/screen.sass */ - [role="article"] footer .contributor:not(:first-child) { - border-top: none; } - /* line 305, ../sass/screen.sass */ - [role="article"] footer .contributor .avatar { - padding: 0; } } - /* line 308, ../sass/screen.sass */ - [role="article"] footer .contributor .avatar { - float: left; - display: block; - margin-right: 4.82916%; - width: 30.11389%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role="article"] footer .contributor .avatar:last-child { - margin-right: 0; } - /* line 311, ../sass/screen.sass */ - [role="article"] footer .contributor .details { - float: left; - display: block; - margin-right: 4.82916%; - width: 65.05695%; - margin-right: 0; - margin-top: 1em; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role="article"] footer .contributor .details:last-child { - margin-right: 0; } - /* line 316, ../sass/screen.sass */ - [role="article"] footer .contributor .details span { - font-weight: 700; } - /* line 319, ../sass/screen.sass */ - [role="article"] footer .contributor .details p { - font-size: 0.75em; - margin-top: 1em; } - /* line 323, ../sass/screen.sass */ - [role="article"] footer small { - display: block; - font-size: 1em; - font-weight: 700; - color: #777777; - text-transform: lowercase; - font-family: "Helvetica Neue", "Helvetica", sans-serif; - font-variant: small-caps; - margin-bottom: 1em; } - /* line 333, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] { - display: block; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - [role="article"] footer [role="navigation"]:after { - content: ""; - display: table; - clear: both; } - /* line 336, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #continue { - float: left; - display: block; - margin-right: 2.35765%; - width: 74.41059%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role="article"] footer [role="navigation"] #continue:last-child { - margin-right: 0; } - /* line 339, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #continue h1 { - margin-bottom: 0.5em; } - /* line 342, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #continue p { - font-size: 0.75em; } - /* line 345, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #related { - float: left; - display: block; - margin-right: 2.35765%; - width: 23.23176%; - margin-right: 0; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - [role="article"] footer [role="navigation"] #related:last-child { - margin-right: 0; } - @media screen and (max-width: 480px) { - /* line 345, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #related { - margin-top: 1em; } } - /* line 352, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #related li { - font-size: 0.75em; } - @media screen and (max-width: 480px) { - /* line 352, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #related li { - font-size: 1em; } } - @media screen and (max-width: 480px) { - /* line 359, ../sass/screen.sass */ - [role="article"] footer [role="navigation"] #continue, [role="article"] footer [role="navigation"] #related { - width: 100%; } } - -/* line 363, ../sass/screen.sass */ -[role="contentinfo"] { - text-align: center; - margin-top: 2em; - padding: 1em; } - -/* line 368, ../sass/screen.sass */ -.avatar { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - max-width: 200px; - max-height: 200px; - border-radius: 50%; - pointer-events: none; - user-select: none; } - -/* line 378, ../sass/screen.sass */ -html ::selection, html ::-moz-selection, body ::selection, body ::-moz-selection { - background: rgba(76, 49, 80, 0.5); - color: white; } - -/* line 382, ../sass/screen.sass */ -a, a:visited { - color: #ff8000 !important; } - /* line 385, ../sass/screen.sass */ - a:hover, a:visited:hover { - text-decoration: none; } - -/* line 389, ../sass/screen.sass */ -.archive dl { - float: left; - display: block; - margin-right: 2.35765%; - width: 31.76157%; - margin-right: 0; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - .archive dl:last-child { - margin-right: 0; } - @media screen and (max-width: 480px) { - /* line 389, ../sass/screen.sass */ - .archive dl { - width: 100%; } } - -/* line 397, ../sass/screen.sass */ -#sharing ul { - display: block; - float: right; } - /* line 15, ../sass/bourbon/addons/_clearfix.scss */ - #sharing ul:after { - content: ""; - display: table; - clear: both; } - @media screen and (max-width: 480px) { - /* line 397, ../sass/screen.sass */ - #sharing ul { - width: 100%; } } -/* line 405, ../sass/screen.sass */ -#sharing li { - font-size: 1.5em; - display: block; - margin: 0.5em; - float: left; } - @media screen and (max-width: 480px) { - /* line 405, ../sass/screen.sass */ - #sharing li { - display: none !important; - margin: 0; - float: left; - display: block; - margin-right: 2.35765%; - width: 23.23176%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - #sharing li:last-child { - margin-right: 0; } - /* line 52, ../sass/neat/grid/_omega.scss */ - #sharing li:nth-child(4) { - margin-right: 0; } - /* line 57, ../sass/neat/grid/_omega.scss */ - #sharing li:nth-child(4+1) { - clear: left; } - /* line 417, ../sass/screen.sass */ - #sharing li a, #sharing li i { - display: block; - margin: 0 auto; - font-size: 1.25em; } } - /* line 422, ../sass/screen.sass */ - #sharing li a:hover { - text-decoration: none; - color: #4c3150 !important; } - -/* line 432, ../sass/screen.sass */ -.archive ul > li, [role="contentinfo"] ul > li, #related ul > li { - list-style: disc inside !important; - display: table-row; } - /* line 436, ../sass/screen.sass */ - .archive ul > li:before, [role="contentinfo"] ul > li:before, #related ul > li:before { - content: "●"; - display: table-cell; - padding-right: 0.5em; } -/* line 441, ../sass/screen.sass */ -.archive ol, [role="contentinfo"] ol, #related ol { - counter-reset: list; } -/* line 444, ../sass/screen.sass */ -.archive ol > li, [role="contentinfo"] ol > li, #related ol > li { - list-style: disc inside !important; - display: table-row; } - /* line 448, ../sass/screen.sass */ - .archive ol > li:before, [role="contentinfo"] ol > li:before, #related ol > li:before { - counter-increment: list; - content: counter(list) "."; - display: table-cell; - padding-right: 0.5em; } -/* line 454, ../sass/screen.sass */ -.archive dl, [role="contentinfo"] dl, #related dl { - padding: 0 0.5em; } - /* line 457, ../sass/screen.sass */ - .archive dl dt, [role="contentinfo"] dl dt, #related dl dt { - font-size: 1.5em; - margin-bottom: 1em; } - /* line 461, ../sass/screen.sass */ - .archive dl dd, [role="contentinfo"] dl dd, #related dl dd { - list-style: disc inside !important; - display: table-row; } - /* line 465, ../sass/screen.sass */ - .archive dl dd:before, [role="contentinfo"] dl dd:before, #related dl dd:before { - content: "●"; - display: table-cell; - padding-right: 0.5em; } - -/* line 470, ../sass/screen.sass */ -section > h1 { - font-family: "Georgia Pro", Georgia, serif; - font-weight: 300; - font-style: italic; - text-align: center; - margin-bottom: 3em; - font-size: 1.5em; } - -/* line 480, ../sass/screen.sass */ -article.excerpt h1 { - font-size: 1.5em; } - -/* line 483, ../sass/screen.sass */ -a.readmore { - font-style: italic; } - /* line 486, ../sass/screen.sass */ - a.readmore:after { - content: " ⟩"; } - -/* line 490, ../sass/screen.sass */ -.content a:hover, [role="contentinfo"] a:hover, footer ul a:hover { - text-decoration: underline; } - -/* line 493, ../sass/screen.sass */ -h1 a:hover { - background: #ff8000; - color: white !important; } - -/* line 498, ../sass/screen.sass */ -.book { - float: left; - display: block; - margin-right: 2.35765%; - width: 31.76157%; } - /* line 38, ../sass/neat/grid/_span-columns.scss */ - .book:last-child { - margin-right: 0; } - /* line 500, ../sass/screen.sass */ - .book:nth-of-type(3n) { - margin-right: 0; } - /* line 503, ../sass/screen.sass */ - .book a { - display: block; } - /* line 508, ../sass/screen.sass */ - .book img { - display: block; - margin: 0 auto; - width: 200px; - padding: 4px; } - /* line 514, ../sass/screen.sass */ - .book img:hover { - padding: 0; - border: 4px #ff8000 solid; } From b132c095bf339c6d1ea676816d962d10ecfa1b8e Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:04:43 -0700 Subject: [PATCH 0372/1324] Updating author information --- nshipster.com/_data/authors.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nshipster.com/_data/authors.yml b/nshipster.com/_data/authors.yml index 06b1d8d3..f6303863 100644 --- a/nshipster.com/_data/authors.yml +++ b/nshipster.com/_data/authors.yml @@ -5,5 +5,5 @@ mattt: twitter: mattt github: mattt google: 106751358503565042647 - bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt), including [Postgres.app](http://postgresapp.com), [ASCIIwwdc](http://asciiwwdc.com) and [Nomad](http://nomad-cli.com)." + bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt?tab=repositories), including [Postgres.app](http://postgresapp.com), [ASCIIwwdc](http://asciiwwdc.com) and [Nomad](http://nomad-cli.com)." From e8f91d4f6e9f6d51abe1caadc8f1c77cc9342fa3 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:05:06 -0700 Subject: [PATCH 0373/1324] Fixing microdata on contributor include --- nshipster.com/_includes/contributor.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nshipster.com/_includes/contributor.html b/nshipster.com/_includes/contributor.html index 69df7077..eaa0c1df 100644 --- a/nshipster.com/_includes/contributor.html +++ b/nshipster.com/_includes/contributor.html @@ -5,7 +5,7 @@ {% assign contributor = site.data.authors.mattt %} -
    +
    {% case include.role %} {% when 'author' %} Written by @@ -16,11 +16,15 @@
    {{ contributor.name }} + {{ include.role }} {{ contributor.bio | markdownify }} {% if contributor.google %} - + {% endif %} + + +
    From 735c7b804fe089f785d3950c4ff9d85aa82124ff Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:05:53 -0700 Subject: [PATCH 0374/1324] Updating default template --- nshipster.com/_layouts/default.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 4d40d116..7be886b6 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -92,7 +92,9 @@

    - {{ contentblock header }} + {% unless page.id %} +

    {{ site.description }}

    + {% endunless %}
    @@ -105,7 +107,8 @@

    NSHipster.com is released under a Creative Commons BY-NC License.

    -

    Articles also available in 中文.

    +

    ISSN 2373-9800

    +

    文章也可在中文

    - - From a1702b0e52d299a428fbec77abfcc6dfa70ffb98 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:06:05 -0700 Subject: [PATCH 0375/1324] Fixing post template --- nshipster.com/_layouts/post.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index b31080cd..d54b41ac 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -4,14 +4,14 @@ {% assign author = site.data.authors.mattt %} -

    -
    +
    {{ content }}
    From 8e452677ec1cb470f2652ba618648dacbbc24ddc Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:06:16 -0700 Subject: [PATCH 0376/1324] Updating _posts --- nshipster.com/_posts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nshipster.com/_posts b/nshipster.com/_posts index a50f5a3a..0bd0ad23 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit a50f5a3ab97a72ce432037f71fb138b992b77eb3 +Subproject commit 0bd0ad23c479b3c5983c4b38cc440f8196daf533 From 0005786a45b9887af0fe138e0e930c569c924d8c Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:06:34 -0700 Subject: [PATCH 0377/1324] Updating config --- _config.en.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_config.en.yml b/_config.en.yml index 98f7cce8..902050e6 100644 --- a/_config.en.yml +++ b/_config.en.yml @@ -7,6 +7,9 @@ description: "NSHipster is a journal of the overlooked bits in permalink: /:title/ timezone: America/Los_Angeles +google: 105091289906267717942 +issn: 2373-9800 + markdown: redcarpet redcarpet: extensions: ["no_intra_emphasis", "fenced_code_blocks", "disable_indented_code_blocks", "autolink", "strikethrough", "highlight", "superscript", "tables", "footnotes", "with_toc_data"] From a0a85f6563ea9a29062b274fa18a6baebd84340f Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:07:11 -0700 Subject: [PATCH 0378/1324] Updating assets --- assets/sass/screen.sass | 44 ++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/assets/sass/screen.sass b/assets/sass/screen.sass index b10e3081..e069eb3f 100644 --- a/assets/sass/screen.sass +++ b/assets/sass/screen.sass @@ -194,6 +194,12 @@ section font-size: 125% margin-bottom: 1em + +media($mobile) + font-size: 75% + + .content + overflow: hidden + +media($tablet) font-size: 100% @@ -236,6 +242,12 @@ section h1, h2, h3, h4, h5 margin: 2em 0 1em 0 + h3 + font-size: 1.25em + + h4 + font-size: 1em + hr width: 40% margin: 2em auto @@ -249,6 +261,9 @@ section margin: 1.5em 0 padding: 0 3em + +media($mobile) + padding: 0 + li list-style: disc margin-bottom: 1em @@ -316,6 +331,9 @@ section +omega margin-top: 1em + +media($mobile) + margin-top: 0 + span font-weight: 700 @@ -426,11 +444,6 @@ a, a:visited text-decoration: none color: $secondary-color !important - -section > h1 - - - .archive, [role="contentinfo"], #related ul > li list-style: disc inside !important @@ -486,17 +499,8 @@ article.excerpt a.readmore font-style: italic - &:after - content: " ⟩" - -.content, [role="contentinfo"], footer ul - a:hover - text-decoration: underline - -h1 a:hover - background: $primary-color - color: #FFFFFF !important - +a:hover + text-decoration: underline .book +span-columns(4 of 12) @@ -523,3 +527,11 @@ h1 a:hover border: 4px $primary-color solid +.tagline + clear: both + font-weight: 300 + margin: 1em 0 + padding-top: 1em + + +media($mobile) + font-size: 110% From 354bceeeb35c99d89e5593063a52d9e14598dcc0 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Fri, 25 Jul 2014 13:07:22 -0700 Subject: [PATCH 0379/1324] Hotfixing Rakefile --- Rakefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 8f81311b..a7ad3923 100644 --- a/Rakefile +++ b/Rakefile @@ -8,10 +8,10 @@ namespace :publish do else raise "Unknown TLD" end +# find _site/ -iname "*.html" -exec tidy -config tidy.conf {} + system %{ bundle exec jekyll build --config _config.#{locale}.yml - find _site/ -iname "*.html" -exec tidy -config tidy.conf {} + find _site/ -iname '*.html' -exec gzip -n --best {} + find _site/ -iname '*.xml' -exec gzip -n --best {} + @@ -34,7 +34,7 @@ namespace :publish do end system %{ - bundle exec compass compile assets --force + bundle exec sass --force -t compressed --update assets/sass:assets/css find assets/css -iname '*.css' -exec gzip -n --best {} + for f in `find assets/css -iname '*.gz'`; do mv $f ${f%.gz} @@ -42,6 +42,8 @@ namespace :publish do s3cmd put --recursive --progress -M --acl-public --add-header 'Content-Encoding:gzip' assets/css s3://nshipster.#{tld}/ + s3cmd put --recursive --progress -M --acl-public assets/fonts s3://nshipster.#{tld}/ + s3cmd put --progress -M --acl-public assets/favicon.ico s3://nshipster.#{tld}/ s3cmd sync --progress -M --acl-public assets/ s3://nshipster.#{tld}/ --exclude '*.*' --include '*.png' --verbose From b3c88aa35e8111328bbaf5d1babc429aa00d055e Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 11:21:58 -0700 Subject: [PATCH 0380/1324] Adding and refactoring ARIA roles in markup --- nshipster.com/_data/authors.yml | 3 +-- nshipster.com/_data/books.yml | 6 +++--- nshipster.com/_layouts/default.html | 6 ++---- nshipster.com/_layouts/post.html | 8 ++++---- nshipster.com/training/index.html | 4 ++++ 5 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 nshipster.com/training/index.html diff --git a/nshipster.com/_data/authors.yml b/nshipster.com/_data/authors.yml index f6303863..0546b1f5 100644 --- a/nshipster.com/_data/authors.yml +++ b/nshipster.com/_data/authors.yml @@ -1,4 +1,4 @@ -mattt: +"Mattt Thompson": name: Mattt Thompson email: mattt@nshipster.com url: http://mattt.me @@ -6,4 +6,3 @@ mattt: github: mattt google: 106751358503565042647 bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt?tab=repositories), including [Postgres.app](http://postgresapp.com), [ASCIIwwdc](http://asciiwwdc.com) and [Nomad](http://nomad-cli.com)." - diff --git a/nshipster.com/_data/books.yml b/nshipster.com/_data/books.yml index 3f110193..954c4f0c 100644 --- a/nshipster.com/_data/books.yml +++ b/nshipster.com/_data/books.yml @@ -1,6 +1,6 @@ nshipster: title: "NSHipster: Obscure Topics in Cocoa & Objective-C" - description: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." + excerpt: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." image: "//cdn.nshipster.com/images/book-cover@2x.png" formats: ebook: @@ -11,7 +11,7 @@ nshipster: cfhipsterref: title: "CFHipsterRef: Low-Level Programming on iOS & Mac OS X" summary: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, _CFHipsterRef: Low-Level Programming on iOS & Mac OS X_ covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." - description: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, CFHipsterRef: Low-Level Programming on iOS & Mac OS X covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." + excerpt: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, CFHipsterRef: Low-Level Programming on iOS & Mac OS X covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." image: "//cdn.nshipster.com/images/cfhipsterref-cover@2x.png" formats: pdf: @@ -23,7 +23,7 @@ cfhipsterref: nshipster-fake-book-objective-c: title: "The NSHipster Fake Book (Objective-C)" summary: "Over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases. Without any needless explanation." - description: "Fake books are an indispensable tool for jazz musicians. They contain the melody, rhythm, and chord changes for hundreds of standards, allowing a player to jump into any session cold, and 'fake it' through any tunes outside their repertoire. It's not sheet music, but rather the essence of tunes. + excerpt: "Fake books are an indispensable tool for jazz musicians. They contain the melody, rhythm, and chord changes for hundreds of standards, allowing a player to jump into any session cold, and 'fake it' through any tunes outside their repertoire. It's not sheet music, but rather the essence of tunes. > Cm11 B9 B♭m9 A♭13 G13 and trade fours with the tenor. diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 7be886b6..da7f8330 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -55,8 +55,6 @@ {% else %} {% endif %} - - @@ -88,7 +86,7 @@

    {% endif %} -
    +
    @@ -97,7 +95,7 @@

    {{ site.description }}

    {% endunless %} -
    +
    {{ content }}
    diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index d54b41ac..cf1d2588 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -15,7 +15,7 @@

    {{ content }}

    -
    +
    - +
    diff --git a/nshipster.com/training/index.html b/nshipster.com/training/index.html new file mode 100644 index 00000000..00d6db1e --- /dev/null +++ b/nshipster.com/training/index.html @@ -0,0 +1,4 @@ +--- +layout: default +title: Training +--- From 26adda982ce7377c9183ec369c69fd9236ae8453 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:14:25 -0700 Subject: [PATCH 0381/1324] Refining microdata --- nshipster.com/_layouts/default.html | 6 +++--- nshipster.com/_layouts/post.html | 9 +++++---- nshipster.com/index.html | 18 ++++++++++++++---- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index da7f8330..31471e15 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -57,7 +57,7 @@ {% endif %} - +

    @@ -95,7 +95,7 @@

    {{ site.description }}

    {% endunless %}
    -
    +
    {{ content }}
    @@ -105,7 +105,7 @@

    {{ site.description }}

    NSHipster.com is released under a Creative Commons BY-NC License.

    -

    ISSN 2373-9800

    +

    ISSN 2373-9800

    文章也可在中文

    diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index cf1d2588..758d977c 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -2,13 +2,14 @@ layout: default --- -{% assign author = site.data.authors.mattt %} +{% assign author = site.data.authors["Mattt Thompson"] %}
    -

    {{ page.title | camel_break }}

    -

    - Written by on

    +

    + {{ page.title | camel_break }} +

    +

    Written by {{ author.name }} on

    diff --git a/nshipster.com/index.html b/nshipster.com/index.html index 8a9be340..a1311004 100644 --- a/nshipster.com/index.html +++ b/nshipster.com/index.html @@ -41,10 +41,20 @@

    Publications

    {% for book in site.data.books %} {% assign identifier = book[0] %} {% assign content = book[1] %} -
    - - {{ content.title }} - +
    +
    + + + {{ content.title }} + + {{ content.title }} + +
    + + + {{ content.price }} +
    +
    {% endfor %} From 94f8d0679ccf1c373617a27f20b6ab9078837b96 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:14:36 -0700 Subject: [PATCH 0382/1324] Updating books.yml --- nshipster.com/_data/books.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/nshipster.com/_data/books.yml b/nshipster.com/_data/books.yml index 954c4f0c..6a0648a3 100644 --- a/nshipster.com/_data/books.yml +++ b/nshipster.com/_data/books.yml @@ -1,17 +1,19 @@ nshipster: title: "NSHipster: Obscure Topics in Cocoa & Objective-C" - excerpt: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." + author: Mattt Thompson + summary: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." image: "//cdn.nshipster.com/images/book-cover@2x.png" formats: ebook: isbn: 978-0-9912182-2-6 availability: in_stock url: https://gum.co/nshipster + price: 19.99 cfhipsterref: title: "CFHipsterRef: Low-Level Programming on iOS & Mac OS X" + author: Mattt Thompson summary: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, _CFHipsterRef: Low-Level Programming on iOS & Mac OS X_ covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." - excerpt: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, CFHipsterRef: Low-Level Programming on iOS & Mac OS X covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." image: "//cdn.nshipster.com/images/cfhipsterref-cover@2x.png" formats: pdf: @@ -19,19 +21,12 @@ cfhipsterref: isbn: ... availability: pre_order url: https://gum.co/cfhipsterref + price: 29.99 nshipster-fake-book-objective-c: title: "The NSHipster Fake Book (Objective-C)" + author: Mattt Thompson summary: "Over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases. Without any needless explanation." - excerpt: "Fake books are an indispensable tool for jazz musicians. They contain the melody, rhythm, and chord changes for hundreds of standards, allowing a player to jump into any session cold, and 'fake it' through any tunes outside their repertoire. It's not sheet music, but rather the essence of tunes. - -> Cm11 B9 B♭m9 A♭13 G13 and trade fours with the tenor. - -Programmers aren't all that different. Once you get the fundamentals down, it's really just about memorizing the APIs. Sure, you could read the docs, but nothing compares to the excitement of tinkering with code. - -That's the idea behind The NSHipster Fake Book: expanding your repertoire through concise code samples, with minimal explanation. It's about letting concepts click as you discover new licks you'd never though to try. Just pick it up and start playing. - -In this book, you'll find over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases." image: "//cdn.nshipster.com/images/the-nshipster-fake-book-cover@2x.png" formats: pdf: @@ -39,3 +34,4 @@ In this book, you'll find over 200 code samples, ranging from the beginner and b isbn: ... availability: in_stock url: https://gum.co/the-nshipster-fake-book + price: 19.99 From be7080eac8c74d39d22454ef084704592dd13a12 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:14:47 -0700 Subject: [PATCH 0383/1324] Updating contributor include --- nshipster.com/_includes/contributor.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/nshipster.com/_includes/contributor.html b/nshipster.com/_includes/contributor.html index eaa0c1df..ca0a2d40 100644 --- a/nshipster.com/_includes/contributor.html +++ b/nshipster.com/_includes/contributor.html @@ -3,9 +3,9 @@ {% elsif include.role == 'translator' %} {% endif %} --> -{% assign contributor = site.data.authors.mattt %} +{% assign contributor = site.data.authors["Mattt Thompson"] %} -
    + From 754827d362deb0df372a7f8e0fd34a6e3426f4c7 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:18:11 -0700 Subject: [PATCH 0384/1324] Fixing assets --- assets/sass/screen.sass | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/assets/sass/screen.sass b/assets/sass/screen.sass index e069eb3f..f40026d3 100644 --- a/assets/sass/screen.sass +++ b/assets/sass/screen.sass @@ -351,35 +351,35 @@ section font-variant: small-caps margin-bottom: 1em - [role="navigation"] - +row +[role="complementary"] + +row - #continue - +span-columns(9 of 12) + #continue + +span-columns(9 of 12) - h1 - margin-bottom: 0.5em + h1 + margin-bottom: 0.5em - p - font-size: 0.75em + p + font-size: 0.75em - #related - +span-columns(3 of 12) - +omega + #related + +span-columns(3 of 12) + +omega - +media($mobile) - margin-top: 1em + +media($mobile) + margin-top: 1em - li - font-size: 0.75em + li + font-size: 0.75em - +media($mobile) - font-size: 1em + +media($mobile) + font-size: 1em - #continue, #related - +media($mobile) - +fill-parent + #continue, #related + +media($mobile) + +fill-parent [role="contentinfo"] text-align: center From ad07ace5e625c8a2e6d47ec002a9f39a3c743bbd Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:19:02 -0700 Subject: [PATCH 0385/1324] Ignoring unpublished pages --- _config.en.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_config.en.yml b/_config.en.yml index 902050e6..78bbc2a0 100644 --- a/_config.en.yml +++ b/_config.en.yml @@ -16,6 +16,8 @@ redcarpet: highlighter: pygments +exclude: ["articles", "books", "training"] + groups: - Cocoa - Objective-C From 41fac142aa29e940b2c565d920650bfb2c607ba3 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:20:39 -0700 Subject: [PATCH 0386/1324] Removing conditional for related articles --- nshipster.com/_layouts/post.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nshipster.com/_layouts/post.html b/nshipster.com/_layouts/post.html index 758d977c..bd0366a9 100644 --- a/nshipster.com/_layouts/post.html +++ b/nshipster.com/_layouts/post.html @@ -64,8 +64,6 @@

    {% assign related = site.categories[category] %} {% endif %} - {% if related.length > 1 %} -

- - {% endif %} From dfe1968601f9450276d1b8dafa25bd1ca1a8964c Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 12:21:29 -0700 Subject: [PATCH 0387/1324] Updating _posts --- nshipster.com/_posts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nshipster.com/_posts b/nshipster.com/_posts index 0bd0ad23..5e5a65c4 160000 --- a/nshipster.com/_posts +++ b/nshipster.com/_posts @@ -1 +1 @@ -Subproject commit 0bd0ad23c479b3c5983c4b38cc440f8196daf533 +Subproject commit 5e5a65c4706a1be87c2a723b06f0cf2236495284 From 835221f1f0b728b6e03e9d9e312a97f7a31e1f1a Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 13:23:17 -0700 Subject: [PATCH 0388/1324] Apply revamped templates to Chinese site --- nshipster.cn/_data/authors.yml | 9 +++ nshipster.cn/_data/books.yml | 37 +++++++++ nshipster.cn/_data/translators.yml | 44 +++++++++++ nshipster.cn/_includes/contributor.html | 26 ++++++ nshipster.cn/_includes/logo.svg | 14 ++++ nshipster.cn/_includes/mustache.svg | 7 ++ nshipster.cn/_includes/ns.svg | 10 +++ nshipster.cn/_layouts/default.html | 101 +++++++++--------------- nshipster.cn/_layouts/post.html | 71 ++++++++++++++--- nshipster.cn/_plugins/only_first_p.rb | 55 ------------- nshipster.cn/_plugins/rfc822.rb | 9 --- nshipster.cn/_plugins/shuffle.rb | 9 +++ nshipster.cn/_plugins/svg_mime_type.rb | 4 - nshipster.cn/_posts | 2 +- nshipster.cn/feed.xml | 11 ++- nshipster.cn/index.html | 82 ++++++++++++++----- 16 files changed, 328 insertions(+), 163 deletions(-) create mode 100644 nshipster.cn/_data/authors.yml create mode 100644 nshipster.cn/_data/books.yml create mode 100644 nshipster.cn/_data/translators.yml create mode 100644 nshipster.cn/_includes/contributor.html create mode 100644 nshipster.cn/_includes/logo.svg create mode 100644 nshipster.cn/_includes/mustache.svg create mode 100644 nshipster.cn/_includes/ns.svg mode change 100755 => 100644 nshipster.cn/_layouts/default.html mode change 100755 => 100644 nshipster.cn/_layouts/post.html delete mode 100644 nshipster.cn/_plugins/only_first_p.rb delete mode 100644 nshipster.cn/_plugins/rfc822.rb create mode 100644 nshipster.cn/_plugins/shuffle.rb delete mode 100644 nshipster.cn/_plugins/svg_mime_type.rb mode change 100755 => 100644 nshipster.cn/index.html diff --git a/nshipster.cn/_data/authors.yml b/nshipster.cn/_data/authors.yml new file mode 100644 index 00000000..cc00734b --- /dev/null +++ b/nshipster.cn/_data/authors.yml @@ -0,0 +1,9 @@ +"Mattt Thompson": + name: Mattt Thompson + email: mattt@nshipster.com + url: http://mattt.me + twitter: mattt + github: mattt + google: 106751358503565042647 + gravatar: f32c3cab150e7018cbe4d00401f597e2 + bio: "[Mattt Thompson](http://mattt.me) is the creator & maintainer of [AFNetworking](https://github.com/afnetworking/afnetworking) and other popular [open-source projects](https://github.com/mattt?tab=repositories), including [Postgres.app](http://postgresapp.com), [ASCIIwwdc](http://asciiwwdc.com) and [Nomad](http://nomad-cli.com)." diff --git a/nshipster.cn/_data/books.yml b/nshipster.cn/_data/books.yml new file mode 100644 index 00000000..6a0648a3 --- /dev/null +++ b/nshipster.cn/_data/books.yml @@ -0,0 +1,37 @@ +nshipster: + title: "NSHipster: Obscure Topics in Cocoa & Objective-C" + author: Mattt Thompson + summary: "To be an NSHipster is to care deeply about the craft of writing code. In cultivating a deep understanding and appreciation of Objective-C, its frameworks and ecosystem, one is able to create apps that delight and inspire users. Combining articles from NSHipster.com with new essays, this book is the essential guide for modern iOS and Mac OS X developers." + image: "//cdn.nshipster.com/images/book-cover@2x.png" + formats: + ebook: + isbn: 978-0-9912182-2-6 + availability: in_stock + url: https://gum.co/nshipster + price: 19.99 + +cfhipsterref: + title: "CFHipsterRef: Low-Level Programming on iOS & Mac OS X" + author: Mattt Thompson + summary: "Perfect for intermediate and expert developers wanting to take a deeper dive into advanced topics, _CFHipsterRef: Low-Level Programming on iOS & Mac OS X_ covers the core technologies powering Cocoa, Objective-C, and the operating system itself, including Core Bluetooth, Accelerate, and the Objective-C runtime." + image: "//cdn.nshipster.com/images/cfhipsterref-cover@2x.png" + formats: + pdf: + price: 29.99 + isbn: ... + availability: pre_order + url: https://gum.co/cfhipsterref + price: 29.99 + +nshipster-fake-book-objective-c: + title: "The NSHipster Fake Book (Objective-C)" + author: Mattt Thompson + summary: "Over 200 code samples, ranging from the beginner and basic to the expert and obscure, across a variety of genres and use cases. Without any needless explanation." + image: "//cdn.nshipster.com/images/the-nshipster-fake-book-cover@2x.png" + formats: + pdf: + price: 19.99 + isbn: ... + availability: in_stock + url: https://gum.co/the-nshipster-fake-book + price: 19.99 diff --git a/nshipster.cn/_data/translators.yml b/nshipster.cn/_data/translators.yml new file mode 100644 index 00000000..dcd2721c --- /dev/null +++ b/nshipster.cn/_data/translators.yml @@ -0,0 +1,44 @@ +"Andrew Yang": + name: "Andrew Yang" + bio: "" + gravatar: "" +"Candyan": + name: "Candyan" + bio: "" + gravatar: "" +"Croath Liu": + name: "Croath Liu" + bio: "" + gravatar: "" +"David Liu": + name: "David Liu" + bio: "" + gravatar: "" +"Henry Lee": + name: "Henry Lee" + bio: "" + gravatar: "" +"JJ Mao": + name: "JJ Mao" + bio: "" + gravatar: "" +"Ricky Tan": + name: "Ricky Tan" + bio: "" + gravatar: "" +"Sheldon Huang": + name: "Sheldon Huang" + bio: "" + gravatar: "" +"Tony Li": + name: "Tony Li" + bio: "" + gravatar: "" +"Yu Jin": + name: "Yu Jin" + bio: "" + gravatar: "" +"Zihan Xu": + name: "Zihan Xu" + bio: "" + gravatar: "" diff --git a/nshipster.cn/_includes/contributor.html b/nshipster.cn/_includes/contributor.html new file mode 100644 index 00000000..15802738 --- /dev/null +++ b/nshipster.cn/_includes/contributor.html @@ -0,0 +1,26 @@ +{% case include.role %} +{% when 'author' %} + {% assign contributor = site.data.authors["Mattt Thompson"] %} +{% when 'translator' %} + {% assign contributor = site.data.translators[page.translator] %} +{% endcase %} + + diff --git a/nshipster.cn/_includes/logo.svg b/nshipster.cn/_includes/logo.svg new file mode 100644 index 00000000..61e54b13 --- /dev/null +++ b/nshipster.cn/_includes/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/nshipster.cn/_includes/mustache.svg b/nshipster.cn/_includes/mustache.svg new file mode 100644 index 00000000..72108a43 --- /dev/null +++ b/nshipster.cn/_includes/mustache.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/nshipster.cn/_includes/ns.svg b/nshipster.cn/_includes/ns.svg new file mode 100644 index 00000000..81e50d3e --- /dev/null +++ b/nshipster.cn/_includes/ns.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/nshipster.cn/_layouts/default.html b/nshipster.cn/_layouts/default.html old mode 100755 new mode 100644 index 9528ea73..3569c31b --- a/nshipster.cn/_layouts/default.html +++ b/nshipster.cn/_layouts/default.html @@ -1,15 +1,11 @@ - + {% if page.id %} {{ page.title | replace:'<br/>',' ' | strip_html }} - {{ site.title }} - {% if page.description %} - - {% else %} - - {% endif %} + {% else %} {{ page.title | strip_html }} @@ -17,10 +13,9 @@ {% endif %} - + - - + @@ -32,21 +27,6 @@ - - - - {% if page.id %} - - {% if page.description %} - - {% else %} - - {% endif %} - {% else %} - - - {% endif %} - {% if page.id %} @@ -70,34 +50,51 @@ - +

- - NS - Hipster - 中文版 - + + {% include ns.svg %} + {% include mustache.svg %}

+ {% if false %} + + {% endif %} + {% unless page.id %} -

- {{ site.description }} -

+

{{ site.description }}

{% endunless %}
-
+
{{ content }}

- - + + 除非另有声明、本网站采用知识共享「署名-非商业性使用 3.0 中国大陆」许可协议授权。 +

+

本站文章由 Mattt Thompson 撰写、 {% assign translators = site.posts | sort: 'translator' | map: 'translator' | uniq %} @@ -112,47 +109,21 @@

{% endfor %} 翻译。 - 创作共用 BY-NC 协议发布。 - -

- - {% if page.id %} - - {% endif %}
- diff --git a/nshipster.cn/_layouts/post.html b/nshipster.cn/_layouts/post.html old mode 100755 new mode 100644 index 6ef55517..1068f77d --- a/nshipster.cn/_layouts/post.html +++ b/nshipster.cn/_layouts/post.html @@ -2,22 +2,75 @@ layout: default --- -
-
-

{{ page.title | camel_break }}

-

Mattt Thompson 撰写, +{% assign author = site.data.authors["Mattt Thompson"] %} + +
+
+

+ {{ page.title | camel_break }} +

+

Written by {{ author.name }} 撰写, {% if page.translator %} {{ page.translator }}翻译, {% endif %} - 发布于

+ 发布于

-
+
{{ content }}
- +
+
+ +
+ +
+ {% include contributor.html role="author" %} + {% if page.translator %} + {% include contributor.html role="translator" %} + {% endif %} +
+ +
+
+ 下一篇文章 + {% assign next = page.next %} + {% if next == nil %} + {% assign next = site.posts.last %} + {% endif %} + + +
+ + + {% assign related = site.related_articles %} + {% if page.category %} + {% assign category = page.category | downcase %} + {% assign related = site.categories[category] %} + {% endif %} + + +
+
diff --git a/nshipster.cn/_plugins/only_first_p.rb b/nshipster.cn/_plugins/only_first_p.rb deleted file mode 100644 index d0c5fa0a..00000000 --- a/nshipster.cn/_plugins/only_first_p.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'nokogiri' - -# Courtesy of Sebastian Zuchmanski (@sebcioz) -# https://github.com/sebcioz/jekyll-only_first_p -module Jekyll - module AssetFilter - @@only_first_p_config = nil - @@only_first_p_default_config = { - "show_read_more_link" => false, - "read_more_link_text" => "Read more" - } - - def only_first_p(post) - output = "

" - output << Nokogiri::HTML(post["content"]).at_css("p").inner_html rescue "" - output << %{

} - - if only_first_p_config()['show_read_more_link'] - output << %{} - output << only_first_p_config()['read_more_link_text'] - output << %{} - end - - output - end - - def only_first_p_config - if @@only_first_p_config == nil - jekyll_configuration = Jekyll.configuration({}) - - if jekyll_configuration['only_first_p'] == nil - @@only_first_p_config = @@only_first_p_default_config - else - if jekyll_configuration['only_first_p'].kind_of?(Object) - @@only_first_p_config = {} - - @@only_first_p_default_config.each.each do |key,value| - if jekyll_configuration['only_first_p'][key] == nil - @@only_first_p_config[key] = value - else - @@only_first_p_config[key] = jekyll_configuration['only_first_p'][key] - end - end - else - @@only_first_p_config = @@only_first_p_default_config - end - end - end - - @@only_first_p_config - end - end -end - -Liquid::Template.register_filter(Jekyll::AssetFilter) diff --git a/nshipster.cn/_plugins/rfc822.rb b/nshipster.cn/_plugins/rfc822.rb deleted file mode 100644 index 56ca37be..00000000 --- a/nshipster.cn/_plugins/rfc822.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Jekyll - module RFC822Filter - def date_to_rfc822(date) - date.strftime("%a, %d %b %Y %H:%M:%S %z") - end - end -end - -Liquid::Template.register_filter(Jekyll::RFC822Filter) diff --git a/nshipster.cn/_plugins/shuffle.rb b/nshipster.cn/_plugins/shuffle.rb new file mode 100644 index 00000000..830ab453 --- /dev/null +++ b/nshipster.cn/_plugins/shuffle.rb @@ -0,0 +1,9 @@ +module Jekyll + module ShuffleFilter + def shuffle(input) + input.sort_by{rand} rescue input + end + end +end + +Liquid::Template.register_filter(Jekyll::ShuffleFilter) diff --git a/nshipster.cn/_plugins/svg_mime_type.rb b/nshipster.cn/_plugins/svg_mime_type.rb deleted file mode 100644 index 2ff48e38..00000000 --- a/nshipster.cn/_plugins/svg_mime_type.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'webrick' -include WEBrick - -WEBrick::HTTPUtils::DefaultMimeTypes.store 'svg', 'image/svg+xml' diff --git a/nshipster.cn/_posts b/nshipster.cn/_posts index 9fb901a9..5c1a9aa4 160000 --- a/nshipster.cn/_posts +++ b/nshipster.cn/_posts @@ -1 +1 @@ -Subproject commit 9fb901a925797d4a35cdefc0d0e0494aceb7016b +Subproject commit 5c1a9aa41f272a27598491aa6b055378ef6fa0be diff --git a/nshipster.cn/feed.xml b/nshipster.cn/feed.xml index a3b4adec..75999bf5 100755 --- a/nshipster.cn/feed.xml +++ b/nshipster.cn/feed.xml @@ -3,19 +3,26 @@ layout: rss --- - + + {{ site.title }} {{ site.description | strip_html }} {{ site.url }} + {{ site.lang }} + {{ site.time | date_to_rfc822 }} {{ site.posts.first.date | date_to_rfc822 }} + Released under a Creative Commons BY-NC License + mattt@nshipster.com (Mattt Thompson) + mattt@nshipster.com (Mattt Thompson) {% for post in site.posts limit: 25 %} {{ post.title | replace:'<br/>',' ' | xml_escape }} {{ post.content | xml_escape }} + mattt@nshipster.com (Mattt Thompson) {{ post.date | date_to_rfc822 }} {{ site.url }}{{ post.url }} - {{ site.url }}{{ post.url }} + {{ site.url }}{{ post.url }} {% endfor %} diff --git a/nshipster.cn/index.html b/nshipster.cn/index.html old mode 100755 new mode 100644 index a50b5d20..11f4c9e2 --- a/nshipster.cn/index.html +++ b/nshipster.cn/index.html @@ -8,33 +8,79 @@
本周发布 -

{{ site.posts.first.title | camel_break }}

+

{{ site.posts.first.title | camel_break }}

- {% if site.posts.first.description %} -

{{ site.posts.first.description }}

- {% else %} - {{ site.posts.first | only_first_p }} - {% endif %} + {{ site.posts.first.excerpt | markdownify }} + + +
+

最近的文章

+ + {% for post in site.posts offset:1 | limit: 6 %} + + {{ post.excerpt | markdownify }} + + {% endfor %}
-
- {% for post in site.posts offset:1 %} -
+
+

书籍

+ {% for book in site.data.books %} + {% assign identifier = book[0] %} + {% assign content = book[1] %} +
+
+ + + {{ content.title }} + + {{ content.title }} + +
+ + + {{ content.price }} +
+
+
+ {% endfor %} +
+ + + + From 9b286a26ea9179f061155c61f4e196a07792dc41 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 13:23:41 -0700 Subject: [PATCH 0389/1324] Changing top-level categories for NSHipster.cn --- _config.zh.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/_config.zh.yml b/_config.zh.yml index 6c7830ba..c5ba56f7 100644 --- a/_config.zh.yml +++ b/_config.zh.yml @@ -15,11 +15,7 @@ redcarpet: highlighter: pygments groups: - - Foundation - - CoreFoundation - - CoreGraphics - - UIKit + - Cocoa - Objective-C - Open Source - - Trivia - Miscellanea From f027ea301f9d5ae2ccd92c4fed582fa66f2fe247 Mon Sep 17 00:00:00 2001 From: Mattt Thompson Date: Sun, 27 Jul 2014 13:24:09 -0700 Subject: [PATCH 0390/1324] Moving publisher link to main footer --- nshipster.com/_includes/contributor.html | 2 -- nshipster.com/_layouts/default.html | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/nshipster.com/_includes/contributor.html b/nshipster.com/_includes/contributor.html index ca0a2d40..9eda6f04 100644 --- a/nshipster.com/_includes/contributor.html +++ b/nshipster.com/_includes/contributor.html @@ -22,7 +22,5 @@ {% if contributor.google %} {% endif %} - -
diff --git a/nshipster.com/_layouts/default.html b/nshipster.com/_layouts/default.html index 31471e15..39b99745 100644 --- a/nshipster.com/_layouts/default.html +++ b/nshipster.com/_layouts/default.html @@ -107,6 +107,7 @@

{{ site.description }}

ISSN 2373-9800

文章也可在中文

+ -After some trial and error, -I managed to come up with a reasonable solution -following the [delegate pattern][delegate pattern]. -The [end result](https://gist.github.com/mattt/17c880d64c362b923e13c765f5b1c75a) -should be familiar to anyone who's ever used -[`CLLocationManager`][cllocationmanager]: +Fortunately, +the latest release of Exposure Notification includes a new +[`ENManager`](https://developer.apple.com/documentation/exposurenotification/enmanager) class, +which simplifies much of that asynchronous state management. ```swift -let manager = ContactTracingManager.shared -manager.delegate = <#DelegateClass#>() -manager.startContactTracing() - -class <#DelegateClass#>: NSObject, ContactTracingManagerDelegate { - func contactTracingManager(_ manager: ContactTracingManager, - didReceiveExposureDetectionSummary summary: CTExposureDetectionSummary) { - if summary.matchedKeyCount > 1 { - // ⚠️ Possible exposure! - } - } -} -``` - -{% warning %} - -To be clear, -I have no idea if this code actually works. -Without the actual framework to test against, -this is all just my best guess. - -{% endwarning %} - -For something that released under such an unyielding deadline, -mistakes are inevitable. -All in all, -I think the teams responsible for the ContactTracing framework -did an admirable job, and I extend my most sincere respect and gratitude -for their work. +let manager = ENManager() +manager.activate { error in + guard error == nil else { <#...#> } - - -{% error %} + manager.setExposureNotificationEnabled(true) { error in + guard error == nil else { <#...#> } -Here are some problems I encountered during my investigation, -which I hope will be addressed in the next update: - -- A few APIs refer to a `CTManagerState` enumeration - that isn't defined in the documentation. -- The documentation for `CTExposureDetectionSession`'s - `addPositiveDiagnosisKeys` method is missing a word - that flips what I believe to be the intended meaning: - - > Each call to this method must NOT - > include more keys than specified by the current value of ``. + // app is now advertising and monitoring for tracing identifiers + } +} +``` -{% enderror %} +* * * ## Tracing a path back to normal life From a43b41d8c0cfef4f9a04c601a9fea05d6b86f6d4 Mon Sep 17 00:00:00 2001 From: Mattt Date: Wed, 29 Apr 2020 13:23:48 -0700 Subject: [PATCH 1257/1324] Update description --- 2020-04-13-contact-tracing.md | 1 - 1 file changed, 1 deletion(-) diff --git a/2020-04-13-contact-tracing.md b/2020-04-13-contact-tracing.md index c4f4a662..6ed97341 100644 --- a/2020-04-13-contact-tracing.md +++ b/2020-04-13-contact-tracing.md @@ -3,7 +3,6 @@ title: Contact Tracing author: Mattt category: Miscellaneous excerpt: >- - On Friday, Apple and Google announced a joint initiative to deploy contact tracing functionality to the billions of devices running iOS or Android in the coming months. From 13a25bb2cb92ef48c24ce178b1c70f0c58488204 Mon Sep 17 00:00:00 2001 From: Mattt Date: Wed, 29 Apr 2020 13:36:11 -0700 Subject: [PATCH 1258/1324] Update links --- 2020-04-13-contact-tracing.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/2020-04-13-contact-tracing.md b/2020-04-13-contact-tracing.md index 6ed97341..7712ddea 100644 --- a/2020-04-13-contact-tracing.md +++ b/2020-04-13-contact-tracing.md @@ -115,7 +115,7 @@ make this level of participation unlikely. On the one hand, it feels weird to congratulate Apple for stepping in to solve a problem it created in the first place. -But we can all agree that Friday's announcement +But we can all agree that this announcement is something to celebrate. It's no exaggeration to say that this wouldn't be possible without their help. @@ -142,7 +142,7 @@ provides a nice explanation of the technologies involved. Apple's CEO, Tim Cook, promises that ["Contact tracing can help slow the spread of COVID-19 and can be done without compromising user privacy."](https://twitter.com/tim_cook/status/1248657931433693184). -The specifications accompanying Friday's announcement +The specifications accompanying the announcement show how that's possible. Let's take them in turn, @@ -497,9 +497,9 @@ and it's now more important than ever. [skip]: #tech-talk "Jump to code discussion" [apple press release]: https://www.apple.com/newsroom/2020/04/apple-and-google-partner-on-covid-19-contact-tracing-technology/ -[cryptography specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ContactTracing-CryptographySpecification.pdf -[hardware specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ContactTracing-BluetoothSpecificationv1.1.pdf -[software specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ContactTracing-FrameworkDocumentation.pdf +[cryptography specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ExposureNotification-CryptographySpecificationv1.2.pdf +[hardware specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ExposureNotification-BluetoothSpecificationv1.2.pdf +[software specification]: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ExposureNotification-FrameworkDocumentationv1.2.pdf [diffie–hellman]: https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange [rfc2104]: https://tools.ietf.org/html/rfc2104 "HMAC: Keyed-Hashing for Message Authentication" [rfc5869]: https://tools.ietf.org/html/rfc5869 "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)" From c90ee0ea49eaba9e0e7f5b502e85611b0693d276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0r=C5=AFtek?= <35694712+michalsrutek@users.noreply.github.com> Date: Thu, 30 Apr 2020 14:32:37 +0200 Subject: [PATCH 1259/1324] Update 2012-09-17-characterset.md (#727) --- 2012-09-17-characterset.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2012-09-17-characterset.md b/2012-09-17-characterset.md index 918d84bb..71593f41 100644 --- a/2012-09-17-characterset.md +++ b/2012-09-17-characterset.md @@ -143,7 +143,7 @@ when what you actually want is `uppercaseLetters`. Unicode actually defines three cases: lowercase, uppercase, and titlecase. You can see this in the Latin script used for -Czech as well as Serbo-Croatian and other South Slavic languages, +Serbo-Croatian and other South Slavic languages, in which digraphs like "dž" are considered single letters, and have separate forms for lowercase (dž), uppercase (DŽ), and titlecase (Dž). From a9ec05b9059d320ea23d915b0e326b024dcca977 Mon Sep 17 00:00:00 2001 From: Mattt Date: Thu, 30 Apr 2020 06:04:39 -0700 Subject: [PATCH 1260/1324] Copy editing --- 2020-04-13-contact-tracing.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/2020-04-13-contact-tracing.md b/2020-04-13-contact-tracing.md index 7712ddea..a902ff9f 100644 --- a/2020-04-13-contact-tracing.md +++ b/2020-04-13-contact-tracing.md @@ -380,7 +380,7 @@ that doesn't offer much in the way of actionable information. Depending on the individual, a push notification saying "You were in exposed for 5–10 minutes sometime 3 days ago" -could prompt an hospital visit +could warrant a visit to the hospital or elicit no more concern than a missed call. With `ExposureNotification`, @@ -398,10 +398,10 @@ you get a lot more information, including: For each instance of exposure, an [`ENExposureInfo`](https://developer.apple.com/documentation/exposurenotification/enexposureinfo) -object is provided with all of this information, -as well as an overall risk score -_([from 1 to 8](https://developer.apple.com/documentation/exposurenotification/enrisklevel))_ -using to +object provides all of the aforementioned information +plus an overall risk score +_([from 1 to 8](https://developer.apple.com/documentation/exposurenotification/enrisklevel))_, +which is calculated from [the app's assigned weights for each factor](https://developer.apple.com/documentation/exposurenotification/enexposureconfiguration), according to this equation: From 94259b2af11227ced249f0542799b83c05c27008 Mon Sep 17 00:00:00 2001 From: Nicolas Garcia Date: Sun, 3 May 2020 19:05:12 +0200 Subject: [PATCH 1261/1324] fix: contact-tracing-en typo --- 2020-04-13-contact-tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2020-04-13-contact-tracing.md b/2020-04-13-contact-tracing.md index a902ff9f..dad54576 100644 --- a/2020-04-13-contact-tracing.md +++ b/2020-04-13-contact-tracing.md @@ -253,7 +253,7 @@ a secondary Battery service. Apple and Google's Contact Tracing standard defines a new Contact Detection service. -When a contract tracing app is running (either in the foreground or background), +When a contact tracing app is running (either in the foreground or background), it acts as a peripheral, advertising its support for the Contact Detection service to any other device within range. From a13faccf3130f5a92cc3f814e7ae27d327db7881 Mon Sep 17 00:00:00 2001 From: Mattt Date: Thu, 7 May 2020 09:02:25 -0700 Subject: [PATCH 1262/1324] Updates for GitHub Codespaces announcement --- 2018-11-05-language-server-protocol.md | 47 ++++++++++++----- 2018-11-19-vscode.md | 71 +++++++++----------------- 2 files changed, 58 insertions(+), 60 deletions(-) diff --git a/2018-11-05-language-server-protocol.md b/2018-11-05-language-server-protocol.md index b4878ed4..35b38f84 100644 --- a/2018-11-05-language-server-protocol.md +++ b/2018-11-05-language-server-protocol.md @@ -12,6 +12,7 @@ revisions: 2018-11-05: Original publication 2018-11-19: Updated 2020-02-06: Updated for Xcode 11.4 + 2020-05-07: Updated for GitHub Codespaces Announcement status: swift: n/a --- @@ -45,21 +46,22 @@ how it works, and what its long-term impacts may be. {% info %} -**Update**: -Xcode 11.4 includes `sourcekit-lsp` in its default toolchain. -The sourcekit-lsp project on GitHub has -[instructions for integrating with your preferred editor](https://github.com/NSHipster/sourcekit-lsp/tree/master/Editors#editor-integration). -While Xcode 11.4 is in beta, -make sure to select the corresponding toolchain with `xcode-select`. -Once you've done that, -use the `xcrun` command to get the path to the language server executable. - -```terminal -$ sudo xcode-select -switch /Applications/Xcode-beta.app/ -$ xcrun -f sourcekit-lsp -/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp -``` +**Update**: +GitHub recently announced +[Codespaces](https://github.com/features/codespaces/), +an upcoming feature that promises +_"the full Visual Studio Code experience without leaving GitHub"_. +Thanks to Swift's support for LSP, +we'll soon be able to edit Swift code — +syntax highlighting, autocompletion, and all — +directly from the browser. + +Why wait for the +[rumored](https://twitter.com/jon_prosser/status/1252187152831692800) +announcement of Xcode for iPad at [WWDC](https://developer.apple.com/wwdc20/)? +Codespaces turns any iPad into a +[full-fledged development environment](https://twitter.com/notdetails/status/1258120708212785154)! {% endinfo %} @@ -306,6 +308,23 @@ This announcement signals a significant shift in the direction of tooling development going forward --- something that would be confirmed 6 months later on the Swift.org forums. +## Getting Started with Language Server Protocol + +Xcode 11.4 includes `sourcekit-lsp` in its default toolchain. +You can use the `xcrun` command +to get the path to the language server executable: + +```terminal +$ xcrun -f sourcekit-lsp +/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp +``` + +Check out [our article about Visual Studio Code](/vscode/) +to get started with our go-to editors. +Beyond that, +the sourcekit-lsp project on GitHub has +[instructions for integrating with Sublime Text, Vim, Emacs, and others.](https://github.com/NSHipster/sourcekit-lsp/tree/master/Editors#editor-integration). + ## Potential Consequences of Apple's Support of Language Server Protocol It'll take some time to feel the full impact of these developments, diff --git a/2018-11-19-vscode.md b/2018-11-19-vscode.md index 948449ce..fce396ea 100644 --- a/2018-11-19-vscode.md +++ b/2018-11-19-vscode.md @@ -8,9 +8,10 @@ excerpt: >- With LSP for Swift now shipping in Xcode, it’s a great time to see how this integration works for yourself. status: - swift: 5.1 + swift: 5.2 revisions: 2020-02-06: Updated for Xcode 11.4 + 2020-05-06: Updated for GitHub Codespaces Announcement --- [Visual Studio Code (VSCode)](https://code.visualstudio.com) @@ -53,6 +54,18 @@ Running this command presents a system prompt. Click the "Get Xcode" button and continue installation on the App Store. +You can verify that everything is working as expected +by running the `sourcekit-lsp` command: + +```terminal +$ xcrun sourcekit-lsp +``` + +This command launches a new language server process, +but don't worry if it doesn't provide any feedback to `STDOUT` --- +that means it's working as intended. +Exit the process with an ETX signal (^C). + ## Step 1: Install Visual Studio Code [Download Visual Studio Code](https://code.visualstudio.com) @@ -71,47 +84,7 @@ its performance and memory footprint are comparable to a native app. {% endinfo %} -## Step 2: Install the Latest Swift Toolchain - -{% info %} - -You can skip this step if you're running Xcode 11.4 or later, -which includes `sourcekit-lsp` in the default toolchain. - -While Xcode 11.4 is in beta, -make sure to select the corresponding toolchain with `xcode-select`. - -```terminal -$ sudo xcode-select -switch /Applications/Xcode-beta.app/ -``` - -{% endinfo %} - -Go to [Swift.org](https://swift.org/download/) -and download the latest trunk development snapshot -(at the time of writing, this was from November 16th, 2018). -Once it's finished downloading, -run the package to install the Xcode toolchain. -To enable it, -open Xcode, -select the "Xcode > Preferences..." menu item (,), -navigate to Components -and choose Swift Development Snapshot. - -You can verify that everything is working as expected -by running the `sourcekit-lsp` command: - -```terminal -$ xcrun sourcekit-lsp -``` - -This command launches a new language server process, -but don't worry if it doesn't provide any feedback to `STDOUT` --- -that means it's working as intended. -Exit the process with an ETX signal (^C). - - -## Step 3: Install Node and NPM +## Step 2: Install Node and NPM VSCode extensions are written in JavaScript / TypeScript. If you're not already set up for JS development, @@ -132,7 +105,7 @@ $ npm --version 6.13.4 ``` -## Step 4: Build and Install SourceKit-LSP Extension for Visual Studio Code +## Step 3: Build and Install SourceKit-LSP Extension for Visual Studio Code From the command line, clone the [sourcekit-lsp repository](https://github.com/apple/sourcekit-lsp) @@ -166,6 +139,12 @@ the [Swift Lint extension](https://marketplace.visualstudio.com/items?itemName=s So there you have it --- the makings of a first-class Swift development experience outside of Xcode. -For now, Swift support for Language Server Protocol is limited, -but we couldn't be more excited for the future of this project -and what it means for Swift beyond the Apple ecosystem. + +And with GitHub's recent announcement of +[Codespaces](https://github.com/features/codespaces/), +that future may be coming sooner than we once thought. +Thanks to Swift's support for +[Language Server Protocol](/language-server-protocol/), +we'll soon be able to edit Swift code — +syntax highlighting, autocompletion, and all — +directly from the browser. From 26d69a2b3595bf41ce3dc4e40a5948d0047b3181 Mon Sep 17 00:00:00 2001 From: Mike Moore Date: Mon, 11 May 2020 06:43:38 -0600 Subject: [PATCH 1263/1324] Typo and syntax fix. (#731) --- 2020-03-26-swift-log.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2020-03-26-swift-log.md b/2020-03-26-swift-log.md index 94994911..d9f184ad 100644 --- a/2020-03-26-swift-log.md +++ b/2020-03-26-swift-log.md @@ -407,7 +407,7 @@ $ swift run audit Thinking back to our objections in the original example, the only remaining concern -is the what we actually _do_ with these logs. +is what we actually _do_ with these logs. According to [12 Factor App](https://12factor.net/logs) principles: @@ -457,7 +457,7 @@ LoggingSystem.bootstrap { label in var slackHandler = SlackLogHandler(label: label, webhookURL: webhookURL) slackHandler.logLevel = .critical - let syslogHandler = SyslogLogHandler(label: label), + let syslogHandler = SyslogLogHandler(label: label) return MultiplexLogHandler([ syslogHandler, From ffa092e275b469ec35e041403986dd4b0fe99dee Mon Sep 17 00:00:00 2001 From: Ian Bytchek Date: Mon, 11 May 2020 19:56:09 +0100 Subject: [PATCH 1264/1324] Add missing decimal point in number formatter example (#732) --- 2019-07-15-formatter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2019-07-15-formatter.md b/2019-07-15-formatter.md index 5ee557f1..18247f56 100644 --- a/2019-07-15-formatter.md +++ b/2019-07-15-formatter.md @@ -180,7 +180,7 @@ formatter.usesSignificantDigits = true formatter.minimumSignificantDigits = 1 // default formatter.maximumSignificantDigits = 6 // default -formatter.string(from: 1234567) // 1234570 +formatter.string(from: 1234567) // 123457.0 formatter.string(from: 1234.567) // 1234.57 formatter.string(from: 100.234567) // 100.235 formatter.string(from: 1.23000) // 1.23 From 46740c7fc1934ccd40dd5c585ff222fad4134809 Mon Sep 17 00:00:00 2001 From: Mattt Date: Mon, 11 May 2020 13:06:58 -0700 Subject: [PATCH 1265/1324] Revert "Add missing decimal point in number formatter example (#732)" (#733) This reverts commit ffa092e275b469ec35e041403986dd4b0fe99dee. --- 2019-07-15-formatter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2019-07-15-formatter.md b/2019-07-15-formatter.md index 18247f56..5ee557f1 100644 --- a/2019-07-15-formatter.md +++ b/2019-07-15-formatter.md @@ -180,7 +180,7 @@ formatter.usesSignificantDigits = true formatter.minimumSignificantDigits = 1 // default formatter.maximumSignificantDigits = 6 // default -formatter.string(from: 1234567) // 123457.0 +formatter.string(from: 1234567) // 1234570 formatter.string(from: 1234.567) // 1234.57 formatter.string(from: 100.234567) // 100.235 formatter.string(from: 1.23000) // 1.23 From e3a75525104c206b50eecaa0fdb25a2c74e92048 Mon Sep 17 00:00:00 2001 From: Stuart Moore Date: Wed, 27 May 2020 11:56:54 -0400 Subject: [PATCH 1266/1324] Fix aposthrophe (#736) The article was rendering as an opening single quote, not apostrophe. --- 2019-07-15-formatter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2019-07-15-formatter.md b/2019-07-15-formatter.md index 5ee557f1..3652e948 100644 --- a/2019-07-15-formatter.md +++ b/2019-07-15-formatter.md @@ -908,7 +908,7 @@ nameComponents.familyName = "苹果籽" formatter.string(from: nameComponents) // "苹果籽约翰尼" ``` -_'nuf said._ +_’nuf said._ ### CNPostalAddressFormatter From c5cf76cc05d22f502b653744a28e30233ca6b0b0 Mon Sep 17 00:00:00 2001 From: Jake Lin Date: Fri, 29 May 2020 10:45:12 +1000 Subject: [PATCH 1267/1324] Update the swiftlint extension The extension in the article is unpublished as mentioned below: > This extension is now unpublished from Marketplace. You can choose to uninstall it. So update to use another extension https://marketplace.visualstudio.com/items?itemName=vknabel.vscode-swiftlint --- 2018-11-19-vscode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2018-11-19-vscode.md b/2018-11-19-vscode.md index fce396ea..f6a59b01 100644 --- a/2018-11-19-vscode.md +++ b/2018-11-19-vscode.md @@ -130,7 +130,7 @@ and test out Language Server Protocol support for Swift. To get the full experience of working with Swift from VSCode, we recommend that you also check out -the [Swift Lint extension](https://marketplace.visualstudio.com/items?itemName=shinnn.swiftlint) +the [Swift Lint extension](https://marketplace.visualstudio.com/items?itemName=vknabel.vscode-swiftlint) (for real-time style and convention diagnostics). {% endinfo %} From 197863398084e49b80262f73387c86b0ba9f8c3e Mon Sep 17 00:00:00 2001 From: BJ Homer Date: Mon, 22 Jun 2020 08:15:54 -0600 Subject: [PATCH 1268/1324] Correctly define @available(*) In a declaration like `@available(macOS 10.15, *)`, the `*` indicates that that the API is _available_ on all other platforms. If you want to indicate that an API is unavailable on a particular platform, you would need to add a separate `@available` attribute for that platform. (See https://docs.swift.org/swift-book/ReferenceManual/Attributes.html) --- 2019-12-10-available.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2019-12-10-available.md b/2019-12-10-available.md index 1285e8c6..7970fae3 100644 --- a/2019-12-10-available.md +++ b/2019-12-10-available.md @@ -101,7 +101,7 @@ the `@available` attribute can take one or two forms: to denote the [major, minor, and patch version](https://semver.org). - Zero or more versioned platforms in a comma-delimited (`,`) list. - An asterisk (`*`), - denoting that the API is unavailable for all other platforms. + denoting that the API is available for all other platforms. An asterisk is always required for platform availability annotations to handle potential future platforms (_such as the [long-rumored `iDishwasherOS`](https://github.com/apple/swift/commit/0d7996f4ee1ce9b7f9f1ea1d2e3ad71394d91eb1#diff-f142ec4252ddcbeea5be368189f43481R25)_). From ea462774e4e4145e0a601625727778f65ae27b54 Mon Sep 17 00:00:00 2001 From: Mattt Date: Fri, 26 Jun 2020 15:39:50 -0700 Subject: [PATCH 1269/1324] Add WWDC 2020 article --- 2020-06-26-wwdc-2020.md | 247 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 2020-06-26-wwdc-2020.md diff --git a/2020-06-26-wwdc-2020.md b/2020-06-26-wwdc-2020.md new file mode 100644 index 00000000..055bd116 --- /dev/null +++ b/2020-06-26-wwdc-2020.md @@ -0,0 +1,247 @@ +--- +title: WWDC 2020 +author: Mattt +category: Miscellaneous +excerpt: >- + A brief recap of the excitement from Apple's annual developer conference. +--- + +Like everything else in 2020, +this year's WWDC had to be a little different +if it was going to happen at all. + +When Apple first announced that the conference would be fully remote, +nobody knew what that would look like, exactly. +What parts of the dubdub experience would be kept in this new format? +What details would be lost in translation? +Could they actually pull it off? + +{% info %} + +For context: +Apple live-streamed its first keynote in 2013, +and technical sessions in 2015. +Attendees of [WWDC 1997][wwdc 1997] could obtain a collection of CDs +with video recordings of sessions — +a far cry from the VHS tape for [WWDC 1990][wwdc 1990]. + +{% endinfo %} + +As it turns out, +going fully remote wasn't merely good enough — +it was, in many ways, superior to the original thing. +There's a lot to like about the new format. + +To be honest, +it's hard to imagine ever going back to a physical conference. + +The videos are well-produced, +and let each presenter's personality really shine. +Everybody looks and sounds great. + +Sessions are tight and well-paced. +Rather than stretching or cramming content into a fixed time slot, +they're as long as they need to be. +And thanks to this more digestible format, +we're starting to see WWDC clips being shared around, +which is new and refreshing. + +However, +as someone who had the privilege of attending WWDC in years past, +there are things I'm going to miss +(and some that I decidedly won't). + +{::nomarkdown type="html"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
🥰😫
Refrigerators stocked with Odwalla smoothiesTrying to download the latest Xcode beta over hotel internet
Lunchtime sessionsEating lunch at or around Moscone
WWDC track jackets saving the lives of first-time attendees from the cold of San Francisco summerBeing in San Francisco, generally
Eating burritos on the terrace of McEnery Convention Center during WWDC check-inBeing in San Jose, generally
Guessing who would be playing at Bash this yearHearing the same handful of songs on repeat before and after every session +(this song in particular)
+ +
+Watching Apple executives dance at Bash + +
+
Talking to people as you wait in line for the keynote on Monday morningWaking up late and having to settle for watching from the overflow room
Leaving at the end of the week with a mix of hope, fear, and inspiration *Being sick for the next week with dubdub flu
+{:/} + + +* I'd like to hold on this last point for a moment. + +
+ +In the _Before Times_, +many of us traveled far from home to attend WWDC. +There was a physical and temporal delineation +between life before, during, and after the conference. +Flying out of SFO, SJC, or OAK, +you escaped Apple's ["reality distortion field"][folklore] +and its surrounding echo chamber. +You returned to your normal life. + +This year? Not so much. + +WWDC 2020 was just another week in this bizarre existence amidst this pandemic. +Not only is there no escape from the "reality distortion field", +there isn't even a "normal life" for us to leave or return to. + +So here we are, +filled with anxious excitement and fear; +our corporeal forms replaced by +Memoji floating in a black, digital void +lit only by the screens of our soon-to-be-obsolete MacBooks Pro. + +{% asset wwdc-2020-banner.jpg %} + +* * * + +## Excitement + +I don't have a real sense of how everything went over this year. +There wasn't any applause (or heckling) at this year's keynote +to gauge the temperature in the room. +There were no parties to overhear shop talk and hot takes. +There was no line for lunch +to make small talk with a fellow employee. + +But if [Twitter][#wwdc20] is anything to go on, +my overall impression is that everyone is really _excited_. + +Which is fine. I get it. + +But it should come as no surprise that things announced at WWDC are exciting — +that's the whole point of having a developer conference in the first place. +Apple has the best marketing in the world, +and WWDC is Apple's way of marketing to us. + +Here's the thing about excitement: +It's kryptonite to developers. + +Excitement messes with our ability to focus on one thing, +which is already a big struggle for a lot of us (myself included). +When you're excited, +it's almost impossible to get anything done. + +There are plenty of voices in the community who are echoing this excitement. +I can't add anything to that discussion. +And besides, +that's not really where my head's at right now. + +### Trivial Pursuit + +I briefly considered reviving the [NSHipster Quiz](/nshipster-quiz-2/) +for WWDC 2020, +but it didn't feel right. +With everything going on in the world, +Apple trivia just isn't where my head or heart are right now. + +To give you a sense of what I mean, here's what I had for Round 3, +whose theme was inspired by [Richard Hamming][hamming]: + +**Question 1.** +: What are the important problems of your field? + +**Question 2.** +: What important problems are you working on? + +**Question 3.** +: If what you are doing is not important, + and if you don't think it is going to lead to something important, + why are working on it? + + + +## Temperance + +If you're serious about solving a problem, +you owe it to yourself to temper any excitement +that distracts you from making real progress. + +In last year's write-up for [WWDC 2019](/wwdc-2019/), +I concluded with the following, +as a counterpoint to the conference's theme of `#mindblown` 🤯: + +> Taking care of yourself — +> sleeping enough, eating right, exercising regularly — +> will do more to improve your productivity +> than any language or framework out there. +> Your ability to communicate and collaborate with others +> will always be a better predictor of success +> than your choice of technology stack. +> Your relationships with others +> are the most significant factors of success and happiness in life. + +I stand by this advice, boring as it may be. + +It's been an exciting week, +so take a moment to collect yourself. +Go on a walk. Take a hike. (Be safe about it.) +Do whatever you need to break free of the "reality distortion field". +Once you do, you'll have the necessary distance to determine +what new technologies you should pay attention to +and what you can ignore for now. + +[wwdc 1990]: http://bslabs.net/2020/06/19/wwdc-1990/ +[wwdc 1997]: http://bslabs.net/2018/05/28/wwdc-1997-videos/ +[folklore]: https://www.folklore.org/StoryView.py?story=Reality_Distortion_Field.txt +[placebo effect]: https://en.wikipedia.org/wiki/Placebo +[#wwdc20]: https://twitter.com/hashtag/WWDC20 +[hey]: https://www.protocol.com/hey-email-app-store-rejection +[antitrust]: https://ec.europa.eu/commission/presscorner/detail/en/ip_20_1073 +[developer forums]: https://forums.developer.apple.com +[hamming]: https://www.cs.virginia.edu/~robins/YouAndYourResearch.html +[Developer app]: https://mjtsai.com/blog/2020/06/16/apple-developer-app-for-mac/ +[transition]: https://www.apple.com/newsroom/2020/06/apple-announces-mac-transition-to-apple-silicon/ + +{% asset articles/wwdc-2020.js %} From f05ba350e62d4bbba9ddeaec6a70e26b2d2d7803 Mon Sep 17 00:00:00 2001 From: Mattt Date: Fri, 26 Jun 2020 15:47:01 -0700 Subject: [PATCH 1270/1324] Update excerpt --- 2020-06-26-wwdc-2020.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2020-06-26-wwdc-2020.md b/2020-06-26-wwdc-2020.md index 055bd116..5aff9425 100644 --- a/2020-06-26-wwdc-2020.md +++ b/2020-06-26-wwdc-2020.md @@ -3,7 +3,7 @@ title: WWDC 2020 author: Mattt category: Miscellaneous excerpt: >- - A brief recap of the excitement from Apple's annual developer conference. + A brief remark about the excitement of Apple's annual developer conference. --- Like everything else in 2020, From e77236512c6c77ae95a53c0d9d77ee339927540a Mon Sep 17 00:00:00 2001 From: Mattt Date: Fri, 26 Jun 2020 15:48:00 -0700 Subject: [PATCH 1271/1324] Copy editing --- 2020-06-26-wwdc-2020.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/2020-06-26-wwdc-2020.md b/2020-06-26-wwdc-2020.md index 5aff9425..f049cb05 100644 --- a/2020-06-26-wwdc-2020.md +++ b/2020-06-26-wwdc-2020.md @@ -194,8 +194,7 @@ whose theme was inspired by [Richard Hamming][hamming]: : What important problems are you working on? **Question 3.** -: If what you are doing is not important, - and if you don't think it is going to lead to something important, +: If what you are doing is not important, why are working on it?