Return-Path: X-Original-To: apmail-brooklyn-commits-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D702BC97C for ; Wed, 17 Dec 2014 17:25:07 +0000 (UTC) Received: (qmail 52480 invoked by uid 500); 17 Dec 2014 17:25:07 -0000 Delivered-To: apmail-brooklyn-commits-archive@brooklyn.apache.org Received: (qmail 52458 invoked by uid 500); 17 Dec 2014 17:25:07 -0000 Mailing-List: contact commits-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list commits@brooklyn.incubator.apache.org Received: (qmail 52449 invoked by uid 99); 17 Dec 2014 17:25:07 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Dec 2014 17:25:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,NORMAL_HTTP_TO_IP,T_RP_MATCHES_RCVD,WEIRD_PORT,WEIRD_QUOTING X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 17 Dec 2014 17:23:39 +0000 Received: (qmail 47453 invoked by uid 99); 17 Dec 2014 17:23:36 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Dec 2014 17:23:36 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 302C282F449; Wed, 17 Dec 2014 17:23:36 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: heneveld@apache.org To: commits@brooklyn.incubator.apache.org Date: Wed, 17 Dec 2014 17:24:01 -0000 Message-Id: <9496e41c1d8f4c0094a89b32997233b6@git.apache.org> In-Reply-To: <3b889e77b7b8430eb1a3930a4f65b0f9@git.apache.org> References: <3b889e77b7b8430eb1a3930a4f65b0f9@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [27/50] [abbrv] incubator-brooklyn git commit: add website files, and update the build.sh script appropriately X-Virus-Checked: Checked by ClamAV on apache.org add website files, and update the build.sh script appropriately Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b86cbf04 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b86cbf04 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b86cbf04 Branch: refs/heads/master Commit: b86cbf049bb3277ac444b8529edf35fab37e2368 Parents: ff06bfe Author: Alex Heneveld Authored: Tue Dec 16 10:40:10 2014 +0000 Committer: Alex Heneveld Committed: Wed Dec 17 02:02:56 2014 +0000 ---------------------------------------------------------------------- docs/README.md | 106 + docs/_build/build.sh | 45 +- docs/_build/config-website-root.yml | 4 + docs/_config.yml | 16 +- docs/_layouts/website-base.html | 76 + docs/_layouts/website-landing.html | 30 + docs/_layouts/website-normal.html | 41 + docs/_plugins/brooklyn_metadata.rb | 60 + docs/_plugins/dependency_url.rb | 31 + docs/_plugins/site_structure.rb | 85 + docs/index.md | 12 + docs/style/css/website.css | 49 + docs/style/deps/bootstrap-theme.css | 346 + docs/style/deps/bootstrap.css | 1 - .../img/apache-brooklyn-logo-244px-wide.png | Bin 0 -> 4892 bytes .../img/apache-brooklyn-logo-817px-wide.png | Bin 0 -> 10688 bytes docs/style/img/bridge-large-no-title.png | Bin 0 -> 66113 bytes docs/style/js/_readme.txt | 2 + docs/style/js/underscore-min.js | 6 + docs/style/js/underscore-min.map | 1 + docs/website/community/committers.md | 119 + docs/website/community/fork-after.png | Bin 0 -> 134377 bytes docs/website/community/fork-before.png | Bin 0 -> 131674 bytes docs/website/community/fork-new.png | Bin 0 -> 137626 bytes .../website/community/how-to-contribute-docs.md | 140 + docs/website/community/how-to-contribute.md | 85 + docs/website/community/index.md | 86 + docs/website/community/migrate-to-apache.md | 117 + docs/website/community/pull-request.png | Bin 0 -> 94166 bytes docs/website/documentation.md | 19 + docs/website/documentation/increase-entropy.md | 31 + docs/website/documentation/install-on-server.md | 122 + docs/website/documentation/passwordless-ssh.md | 29 + docs/website/documentation/ssh-key.md | 9 + docs/website/download.md | 70 + docs/website/glossary.md | 92 + docs/website/index.md | 71 + docs/website/learnmore/catalog/common.js | 94 + .../brooklyn.enricher.DeltaEnricher.html | 59 + .../brooklyn.enricher.HttpLatencyDetector.html | 59 + .../brooklyn.enricher.RollingMeanEnricher.html | 59 + ....enricher.RollingTimeWindowMeanEnricher.html | 59 + ...klyn.enricher.TimeFractionDeltaEnricher.html | 59 + ...klyn.enricher.TimeWeightedDeltaEnricher.html | 59 + .../brooklyn.enricher.basic.Aggregator.html | 59 + .../brooklyn.enricher.basic.Combiner.html | 59 + .../brooklyn.enricher.basic.Propagator.html | 59 + .../brooklyn.enricher.basic.Transformer.html | 59 + ...ooklyn.policy.ha.ServiceFailureDetector.html | 59 + ...lyn.entity.basic.VanillaSoftwareProcess.html | 66 + ...ntity.brooklynnode.BrooklynEntityMirror.html | 66 + ...ooklyn.entity.brooklynnode.BrooklynNode.html | 66 + ...lyn.entity.database.mariadb.MariaDbNode.html | 66 + ...rooklyn.entity.database.mysql.MySqlNode.html | 66 + ...tity.database.postgresql.PostgreSqlNode.html | 66 + ...lyn.entity.database.rubyrep.RubyRepNode.html | 66 + .../brooklyn.entity.machine.MachineEntity.html | 66 + ...ntity.messaging.activemq.ActiveMQBroker.html | 66 + ...lyn.entity.messaging.kafka.KafkaCluster.html | 66 + ...ooklyn.entity.messaging.qpid.QpidBroker.html | 66 + ...yn.entity.messaging.rabbit.RabbitBroker.html | 66 + .../brooklyn.entity.messaging.storm.Storm.html | 66 + ....entity.messaging.storm.StormDeployment.html | 66 + ...oklyn.entity.monitoring.monit.MonitNode.html | 66 + ...oklyn.entity.network.bind.BindDnsServer.html | 66 + ...ity.nosql.cassandra.CassandraDatacenter.html | 66 + ....entity.nosql.cassandra.CassandraFabric.html | 66 + ...yn.entity.nosql.cassandra.CassandraNode.html | 66 + ...entity.nosql.couchbase.CouchbaseCluster.html | 66 + ...yn.entity.nosql.couchbase.CouchbaseNode.html | 66 + ...ooklyn.entity.nosql.couchdb.CouchDBNode.html | 66 + ...osql.elasticsearch.ElasticSearchCluster.html | 66 + ...y.nosql.elasticsearch.ElasticSearchNode.html | 66 + ...klyn.entity.nosql.mongodb.MongoDBServer.html | 66 + ...ty.nosql.mongodb.sharding.MongoDBRouter.html | 66 + ...ngodb.sharding.MongoDBShardedDeployment.html | 66 + ...rooklyn.entity.nosql.redis.RedisCluster.html | 66 + .../brooklyn.entity.nosql.redis.RedisStore.html | 66 + .../brooklyn.entity.nosql.riak.RiakCluster.html | 66 + .../brooklyn.entity.nosql.riak.RiakNode.html | 66 + .../brooklyn.entity.nosql.solr.SolrServer.html | 66 + ...ooklyn.entity.osgi.karaf.KarafContainer.html | 66 + .../brooklyn.entity.pool.ServerPool.html | 66 + ...klyn.entity.proxy.nginx.NginxController.html | 66 + ...y.webapp.ControlledDynamicWebAppCluster.html | 66 + ...klyn.entity.webapp.DynamicWebAppCluster.html | 66 + ...ooklyn.entity.webapp.jboss.JBoss6Server.html | 66 + ...ooklyn.entity.webapp.jboss.JBoss7Server.html | 66 + ...ooklyn.entity.webapp.jetty.Jetty6Server.html | 66 + ...ntity.webapp.nodejs.NodeJsWebAppService.html | 66 + ...oklyn.entity.webapp.tomcat.TomcatServer.html | 66 + ...klyn.entity.zookeeper.ZooKeeperEnsemble.html | 66 + ...brooklyn.entity.zookeeper.ZooKeeperNode.html | 66 + docs/website/learnmore/catalog/index.html | 147 + docs/website/learnmore/catalog/items.css | 153 + docs/website/learnmore/catalog/items.js | 24674 +++++++++++++++++ .../learnmore/catalog/libs/js/bloodhound.js | 727 + ...brooklyn.entity.pool.ServerPoolLocation.html | 62 + .../brooklyn.location.AddressableLocation.html | 62 + .../brooklyn.location.MachineLocation.html | 62 + ...tMixins$RichMachineProvisioningLocation.html | 62 + ...yn.location.MachineProvisioningLocation.html | 62 + ...rooklyn.location.basic.AbstractLocation.html | 62 + ....AggregatingMachineProvisioningLocation.html | 62 + ...ic.FixedListMachineProvisioningLocation.html | 62 + ...neProvisioningLocation$LocalhostMachine.html | 62 + ...ic.LocalhostMachineProvisioningLocation.html | 62 + ...rooklyn.location.basic.LocationInternal.html | 62 + .../brooklyn.location.basic.MultiLocation.html | 62 + ...ooklyn.location.basic.SimulatedLocation.html | 62 + ...basic.SingleMachineProvisioningLocation.html | 62 + ...oklyn.location.basic.SshMachineLocation.html | 62 + ...bstractCloudMachineProvisioningLocation.html | 62 + ...AbstractJcloudsSubnetSshMachineLocation.html | 62 + ...ooklyn.location.jclouds.JcloudsLocation.html | 62 + ...ation.jclouds.JcloudsSshMachineLocation.html | 62 + ...followthesun.DefaultFollowTheSunModel$1.html | 62 + ...lyn.policy.autoscaling.AutoScalerPolicy.html | 59 + ....policy.followthesun.FollowTheSunPolicy.html | 59 + ...lyn.policy.ha.ConnectionFailureDetector.html | 59 + .../brooklyn.policy.ha.ServiceReplacer.html | 59 + .../brooklyn.policy.ha.ServiceRestarter.html | 59 + ...olicy.loadbalancing.LoadBalancingPolicy.html | 59 + docs/website/learnmore/index.md | 11 + docs/website/learnmore/theory.md | 177 + docs/website/learnmore/yaml-explained.md | 9 + docs/website/quickstart/_my-web-cluster.yaml | 19 + docs/website/quickstart/brooklyn.properties | 266 + docs/website/quickstart/catalog.xml | 22 + ...cation-catalog-web-cluster-with-db-large.png | Bin 0 -> 131618 bytes ...talog-web-cluster-with-db-location-large.png | Bin 0 -> 152721 bytes ...ion-catalog-web-cluster-with-db-location.png | Bin 0 -> 86425 bytes ...-application-catalog-web-cluster-with-db.png | Bin 0 -> 76065 bytes .../images/add-application-modal-yaml.png | Bin 0 -> 68401 bytes .../images/jboss7-cluster-policies-large.png | Bin 0 -> 157883 bytes .../images/jboss7-cluster-policies.png | Bin 0 -> 94056 bytes .../images/my-db-activities-large.png | Bin 0 -> 208313 bytes .../quickstart/images/my-db-activities.png | Bin 0 -> 130262 bytes .../images/my-web-cluster-starting.png | Bin 0 -> 32948 bytes .../my-web-cluster-stop-confirm-large.png | Bin 0 -> 148155 bytes .../images/my-web-cluster-stop-confirm.png | Bin 0 -> 79280 bytes .../quickstart/images/my-web-summary-large.png | Bin 0 -> 178785 bytes .../quickstart/images/my-web-summary.png | Bin 0 -> 80583 bytes docs/website/quickstart/images/my-web.png | Bin 0 -> 83081 bytes docs/website/quickstart/index.md | 215 + .../website/quickstart/policies-and-catalogs.md | 67 + 146 files changed, 33616 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/README.md ---------------------------------------------------------------------- diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..6cac8b0 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,106 @@ +Brooklyn Website source +======================= + +Contributor worflow +------------------- + +The contributor workflow is identical to that used by the main project, with +the exception of the different repository - `incubator-brooklyn-site` instead +of `incubator-brooklyn`. Therefore you should familiarise yourself with the +standard workflow for Apache Brooklyn: + +* [Guide for contributors][CONTRIB] +* [Guide for committers][COMMIT] + +[CONTRIB]: https://brooklyn.incubator.apache.org/community/how-to-contribute.html +[COMMIT]: https://brooklyn.incubator.apache.org/community/committers.html + + +Workstation setup +----------------- + +First, clone the `incubator-brooklyn-site` repository and set up the remotes as +described in [Guide for committers][COMMIT]. + +Install [RVM](http://rvm.io/); this manages Ruby installations and sets of Ruby +gems. + + \curl -sSL https://get.rvm.io | bash -s stable + +At this point, close your shell session and start a new one, to get the new +environment that RVM has configured. Now change directory to the location where +you checked out your repository, and then to the `_scripts` subdirectory. + +RVM should detect its configuration inside `Gemfile` and try to configure itself. +Most likely it will report that the required version of Ruby is not installed; +it will show the command that you need to run to install the correct version. +Follow these instructions. + +Once the correct version of Ruby is installed, change to your home directory +(`cd ~`) and then change back to the repository again (`cd -`). This will cause +RVM to re-load configuration from `Gemfile` with the correct version of Ruby. + +If you are running Ubuntu, there is a further dependency that is required: + + sudo apt-get install libxslt-dev libxml2-dev + +Finally, run this command inside `_scripts` to install all the required Gems +in the correct versions: + + bundle install + +Anytime you need to reset your Ruby environment for jekyll to run correctly, +return to the `_scripts` directory and re-run the above command. + + +Building and previewing the website +----------------------------------- + +### Using Jekyll's in-built server + +Run the command: + + jekyll serve --watch + +This will start up a local web server. The URL is printed by Jekyll when the server starts, +e.g. http://localhost:4000/brooklyn/ . The server will continue to run until you press Ctrl+C. +Modified files will be detected and regenerated (but that might take up to 1m). +Leave off the `--watch` argument to abandon that behaviour, or use `jekyll build` instead +to generate a site in `_site` without a server, for instance if your browser supports running from disk. + + + +### Combining with Brooklyn user-manual / version docs + +TODO: Some links should come from the incubator-brooklyn/docs/ project. +They can run in debug mode on a different port. + + +Building and publishing the website +----------------------------------- + +Run this script: + + ./_scripts/build-for-publication + +This will run Jekyll with the correct base URL for the live website and place +the output in the `_site` directory. + +The Apache website publication process is based around the Subversion repository; the generated HTML files must be checked in to Subversion, whereupon an automated process will publish the files to the live website. + +Starting in a suitable directory, check out the website directory from the repository: + + svn co https://svn.apache.org/repos/asf/incubator/brooklyn/site incubator-brooklyn-site-public + cd incubator-brooklyn-site-public + +Synchronise the generated site into the Subversion working copy - please amend this command to include the correct paths for your setup: + + rsync -rv --delete --exclude .svn --exclude v ~/incubator-brooklyn-site/_site/ ~/incubator-brooklyn-site-public + +Review the changes using the usual `svn` commands - e.g., `status`, `diff`, `add`, `rm`, etc. + +Once you are ready to publish, commit the changes to Subversion: + + svn ci -m 'Update Brooklyn (incubating) website' + +The changes will become live within a few minutes. http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_build/build.sh ---------------------------------------------------------------------- diff --git a/docs/_build/build.sh b/docs/_build/build.sh index d10dc82..b1a4032 100755 --- a/docs/_build/build.sh +++ b/docs/_build/build.sh @@ -4,7 +4,7 @@ # override --url /myMountPoint (as an argument to this script) if you don't like the default set in /_config.yml if [ ! -x _build/build.sh ] ; then - echo script must be run in root of docs dir + echo ERROR: script must be run in root of docs dir exit 1 fi @@ -12,9 +12,12 @@ function help() { echo "This will build the documentation in _site/." echo "Usage: _build/build.sh MODE [ARGS]" echo "where MODE is:" - echo "* guide-root : to build the guide in the root" - echo "* guide-version : to build the guide in the versioned namespace /v/VERSION/" - echo "* default : to build the files in their natural location (e.g. guide in /guide/)" + echo "* root : to build root files for production, the website in the root and guide in /guide/" + # BROOKLYN_VERSION_BELOW + echo "* guide-version : to build a versioned guide for production; guide only, in the versioned namespace /v/0.7.0-SNAPSHOT/" + echo "* website-root : to build the website only, in the root" + echo "* guide-root : to build the guide only, in the root" + echo "* original : to build the files in their original location (e.g. guide in /guide/)" echo "and supported ARGS are:" echo "* --skip-javadoc : to skip javadoc build" echo 'with any remaining ARGS passed to jekyll as `jekyll build --config ... ARGS`.' @@ -26,9 +29,27 @@ function deduce_config() { help) help exit 0 ;; + root) + CONFIG=_config.yml,_build/config-production.yml,_build/config-website-root.yml + DIRS_TO_MOVE[0]=website + DIRS_TO_MOVE_TARGET[0]="" + SKIP_JAVADOC=true + SUMMARY="root production files, website in root and guide in /guide/" + ;; + website-root) + CONFIG=_config.yml,_build/config-production.yml,_build/config-website-root.yml + DIRS_TO_MOVE[0]=website + DIRS_TO_MOVE_TARGET[0]="" + DIRS_TO_MOVE[1]=guide + DIRS_TO_MOVE_TARGET[1]=long_grass + SUMMARY="user guide files in the root" + ;; guide-root) CONFIG=_config.yml,_build/config-production.yml,_build/config-guide-root.yml - DIRS_TO_MOVE["guide"]="" + DIRS_TO_MOVE[0]=guide + DIRS_TO_MOVE_TARGET[0]="" + DIRS_TO_MOVE[1]=website + DIRS_TO_MOVE_TARGET[1]=long_grass SUMMARY="user guide files in the root" ;; guide-version) @@ -39,22 +60,24 @@ function deduce_config() { DIRS_TO_MOVE_TARGET[0]=v/0.7.0-SNAPSHOT DIRS_TO_MOVE[1]=style DIRS_TO_MOVE_TARGET[1]=${DIRS_TO_MOVE_TARGET[0]}/style + DIRS_TO_MOVE[2]=website + DIRS_TO_MOVE_TARGET[2]=long_grass SUMMARY="user guide files in /${DIRS_TO_MOVE_TARGET[0]}" ;; - default) + original) CONFIG=_config.yml,_build/config-production.yml - SUMMARY="all files in their default place" + SUMMARY="all files in their original place" ;; "") - echo "Arguments are required. Try 'help'." + echo "ERROR: arguments are required; try 'help'" exit 1 ;; *) - echo "Invalid argument '$1'. Try 'help'." + echo "ERROR: invalid argument '$1'; try 'help'" exit 1 ;; esac } -function build_jekyll() { +function make_jekyll() { echo JEKYLL running with: jekyll build $CONFIG $@ jekyll build --config $CONFIG $@ || return 1 echo JEKYLL completed @@ -80,7 +103,7 @@ if [ "$1" = "--skip-javadoc" ]; then shift fi -build_jekyll || { echo ERROR: could not build docs in `pwd` ; exit 1 ; } +make_jekyll || { echo ERROR: could not build docs in `pwd` ; exit 1 ; } if [ "$SKIP_JAVADOC" != "true" ]; then pushd _build > /dev/null http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_build/config-website-root.yml ---------------------------------------------------------------------- diff --git a/docs/_build/config-website-root.yml b/docs/_build/config-website-root.yml new file mode 100644 index 0000000..3195f8c --- /dev/null +++ b/docs/_build/config-website-root.yml @@ -0,0 +1,4 @@ + +path: + website: "" + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_config.yml ---------------------------------------------------------------------- diff --git a/docs/_config.yml b/docs/_config.yml index 5bb4372..8128967 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -26,9 +26,23 @@ brooklyn-snapshot-git-branch: master # if line above is SNAPSHOT this should p url_root: http://0.0.0.0:4000 # absolute base directories where things will land on the server -# (prefix each with e.g. /brooklyn to test for absolute reference problems) path: style: /style guide: /guide + website: /website v: /v +# (to test for absolute reference problems you can prefix each of the above, +# with e.g. /brooklyn , and set the baseurl below) +#baseurl: /brooklyn + +# Use local copies of dependencies in dev build (switched to remote using URLs for prod build) +dependency_mode: local +dependency_urls: + bootstrap.css: https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css + bootstrap.js: https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js + jquery.js: https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js + +# These files should not be included in the final build (in addition to _* contents) + +exclude: ['README.md'] http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_layouts/website-base.html ---------------------------------------------------------------------- diff --git a/docs/_layouts/website-base.html b/docs/_layouts/website-base.html new file mode 100644 index 0000000..17cb459 --- /dev/null +++ b/docs/_layouts/website-base.html @@ -0,0 +1,76 @@ + + + + +{{ page.title }} - Apache Brooklyn (incubating) + + + + + + + + + + + +{{ content }} + + + + + + + + + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_layouts/website-landing.html ---------------------------------------------------------------------- diff --git a/docs/_layouts/website-landing.html b/docs/_layouts/website-landing.html new file mode 100644 index 0000000..6049fb0 --- /dev/null +++ b/docs/_layouts/website-landing.html @@ -0,0 +1,30 @@ +--- +# layout for front page, contianing only the footer, with a bit more text +layout: website-base +--- +
+ {{ content }} +
+ + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_layouts/website-normal.html ---------------------------------------------------------------------- diff --git a/docs/_layouts/website-normal.html b/docs/_layouts/website-normal.html new file mode 100644 index 0000000..2fb7110 --- /dev/null +++ b/docs/_layouts/website-normal.html @@ -0,0 +1,41 @@ +--- +# layout for most website (non-guide) pages, inheriting base for the menu bar, and providing a main column of content and a menu column +layout: website-base +--- +
+
+
+

{{ page.title }}

+ {{ content }} +
+
+ {% if page.menu2 %} +
+

{{ page.menu2parent.title }}

+ {% for child in page.menu2 %} + {{ child.reference.title }} + {% endfor %} +
+ {% endif %} +
+
+
+ + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_plugins/brooklyn_metadata.rb ---------------------------------------------------------------------- diff --git a/docs/_plugins/brooklyn_metadata.rb b/docs/_plugins/brooklyn_metadata.rb new file mode 100644 index 0000000..c0dcc3d --- /dev/null +++ b/docs/_plugins/brooklyn_metadata.rb @@ -0,0 +1,60 @@ +# Inserts several useful fields that can be referenced using {{ name }} syntax +# +# site.data.brooklyn.version: brooklyn version, such as 0.7.0-M1 +# site.data.brooklyn.is_snapshot: true if this is a snapshot version, otherwise false +# site.data.brooklyn.url.userguide: URL of the user guide for this version +# +module BrooklynMetadata + + BROOKLYN_VERSION = "0.7.0-M1" unless defined? BROOKLYN_VERSION + + class Generator < Jekyll::Generator + def generate(site) + is_snapshot = BrooklynMetadata::BROOKLYN_VERSION.end_with?('-SNAPSHOT') + + if is_snapshot + url_set = { + "search" => { + "all" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~~#{ BrooklynMetadata::BROOKLYN_VERSION }~~", + "dist" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~brooklyn-dist~#{ BrooklynMetadata::BROOKLYN_VERSION }~~", + "alljar" => "https://oss.sonatype.org/index.html#nexus-search;gav~io.brooklyn~brooklyn-dist~#{ BrooklynMetadata::BROOKLYN_VERSION }~~" + }, + "dist" => { + "base" => "https://oss.sonatype.org/content/groups/public/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/", + "zip" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }&a=brooklyn-dist&c=dist&e=zip", + "tgz" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }&a=brooklyn-dist&c=dist&e=tar.gz" + }, + "alljar" => { + "base" => "https://oss.sonatype.org/content/groups/public/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/", + "jar" => "https://oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=io.brooklyn&v=#{ BrooklynMetadata::BROOKLYN_VERSION }}&a=brooklyn-all&c=with-dependencies&e=jar" + } + } + else + url_set = { + "search" => { + "all" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22", + "dist" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20a%3A%22brooklyn-dist%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22", + "alljar" => "http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22io.brooklyn%22%20AND%20a%3A%22brooklyn-all%22%20AND%20v%3A%22#{ BrooklynMetadata::BROOKLYN_VERSION }%22" + }, + "dist" => { + "base" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/", + "zip" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-dist-#{ BrooklynMetadata::BROOKLYN_VERSION }-dist.zip", + "tgz" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-dist/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-dist-#{ BrooklynMetadata::BROOKLYN_VERSION }-dist.tar.gz" + }, + "alljar" => { + "base" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/", + "jar" => "http://repo1.maven.org/maven2/io/brooklyn/brooklyn-all/#{ BrooklynMetadata::BROOKLYN_VERSION }/brooklyn-all-#{ BrooklynMetadata::BROOKLYN_VERSION }-with-dependencies.jar" + } + } + end + + url_set['userguide'] = "#{site.config['url']}/v/#{BrooklynMetadata::BROOKLYN_VERSION}" + + site.data['brooklyn'] = { + "version" => BrooklynMetadata::BROOKLYN_VERSION, + "is_snapshot" => is_snapshot, + "url" => url_set + } + end + end +end http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_plugins/dependency_url.rb ---------------------------------------------------------------------- diff --git a/docs/_plugins/dependency_url.rb b/docs/_plugins/dependency_url.rb new file mode 100644 index 0000000..8a72e17 --- /dev/null +++ b/docs/_plugins/dependency_url.rb @@ -0,0 +1,31 @@ +# tag to write the correct URL depending whether we are running with dependencies local (for offline) or remote (eg using a CDN) + +# specify a map of : in the key `dependency_urls` in your `_config.yml`, +# then, if `dependency_mode: local` is defined, the path `{{site.path.style}}/deps/` will be used, +# otherwise the will be used + +module JekyllDependencyUrl + class DependencyUrlTag < Liquid::Tag + def initialize(tag_name, text, tokens) + super + @text = text + end + def render(context) + jekyllSite = context.registers[:site] + mode = context['site']['dependency_mode'] + if mode != 'local' + result = context['site']['dependency_urls'][@text.strip] + if result.to_s == '' + raise 'No value in dependency_urls specified for ' + @text.strip + end + end + if result.to_s == '' + result = context['site']['path']['style'] + "/deps/" + @text.strip + end + return result + end + end +end + +Liquid::Template.register_tag('dependency_url', JekyllDependencyUrl::DependencyUrlTag) + http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/_plugins/site_structure.rb ---------------------------------------------------------------------- diff --git a/docs/_plugins/site_structure.rb b/docs/_plugins/site_structure.rb new file mode 100644 index 0000000..6cfe1f9 --- /dev/null +++ b/docs/_plugins/site_structure.rb @@ -0,0 +1,85 @@ +# Builds a hierarchical structure for the site, based on the YAML front matter of each page +# Starts from a page called "index.md", and follows "children" links in the YAML front matter +module SiteStructure + + BROOKLYN_WEBSITE_ROOT = "/website/index.md" unless defined? BROOKLYN_WEBSITE_ROOT + + class Generator < Jekyll::Generator + def find_page_with_path_absolute_or_relative_to(site, path, referrent) + page = site.pages.detect { |page| "/"+page.path == path } + if !page && referrent + page = site.pages.detect { |page| "/"+page.path == "/"+File.dirname(referrent.path)+"/"+path } + end + if !page + page = site.pages.detect { |page| page.path == path } + puts "WARNING: link to #{path} in #{referrent ? referrent.path : "root"} uses legacy absolute syntax without leading slash" if page + end + + throw "Could not find a page called: #{path} (referenced from #{referrent ? referrent.path : "root"})" unless page + + if (page.url.start_with?("/website")) + page.url.slice!("/website") + page.url.prepend(site.config['path']['website']) + end + + page + end + + def generate(site) + root_page = find_page_with_path_absolute_or_relative_to(site, SiteStructure::BROOKLYN_WEBSITE_ROOT, nil) + navgroups = root_page.data['navgroups'] + navgroups.each do |ng| + ng['page'] = find_page_with_path_absolute_or_relative_to(site, ng['page'], root_page) + if not ng['title_in_menu'] + ng['title_in_menu'] = ng['title'].capitalize + end + end + site.data['navgroups'] = navgroups + site.data['structure'] = gen_structure(site, SiteStructure::BROOKLYN_WEBSITE_ROOT, nil, navgroups) + end + + def gen_structure(site, pagename, parent, navgroups) + page = find_page_with_path_absolute_or_relative_to(site, pagename, parent) + + # My navgroup is (first rule matches): + # 1. what I have explicitly declared + # 2. if I find my path referred to in the global navgroup list + # 3. my parent's navgroup + unless page.data['navgroup'] + match = navgroups.detect { |ng| ng['page'] == page } + if match + page.data['navgroup'] = match['id'] + elsif parent + page.data['navgroup'] = parent.data['navgroup'] + end + end + + # Figure out second level menu + # If there's no parent => I'm at the top level, so no action + # If there's a parent, but parent has no parent => I'm at second level, so set second-level menu + # Otherwise, use the parent's second level menu + if parent && !parent.data['parent'] + page.data['menu2parent'] = page + page.data['menu2'] = page.data['children'] + elsif parent && parent.data['parent'] + page.data['menu2parent'] = parent.data['menu2parent'] + page.data['menu2'] = parent.data['menu2'] + end + + page.data['parent'] = parent + if page.data['children'] + page.data['children'].each do |c| + if c['path'] + # links to another Jekyll site-structured page + c['reference'] = gen_structure(site, c['path'], page, navgroups) + elsif c['link'] + # links to a non-site-structured page, on this site or elsewhere + c['reference'] = { 'url' => c['link'], 'title' => c['title'] } + end + end + end + + page + end + end +end http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/index.md ---------------------------------------------------------------------- diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..021df26 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,12 @@ +--- +layout: website-normal +title: Brooklyn Website and Docs (dev build) +--- + +This page is not copied into release builds. It is here as a convenience when doing dev builds. + +Consider looking at: + +* the brooklyn website + +Also see the file README.md in this directory. http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/css/website.css ---------------------------------------------------------------------- diff --git a/docs/style/css/website.css b/docs/style/css/website.css new file mode 100644 index 0000000..135c2b0 --- /dev/null +++ b/docs/style/css/website.css @@ -0,0 +1,49 @@ +/* Sticky footer styles +-------------------------------------------------- */ +html { + position: relative; + min-height: 100%; +} + +@media (min-width: 1200px) { + .slightlyNarrowContainer { + width: 970px; + } +} + +.navbar-brand { + margin-top: -4px; + margin-left: -30px !important; +} + +ul.nav li.dropdown:hover > ul.dropdown-menu { + display: block; +} + +#apachebrooklynbanner { + background-image: url("../img/apache-brooklyn-logo-817px-wide.png"); + background-repeat: no-repeat; + background-position: center; + width: 817px; + height: 99px; + margin-bottom: 50px; +} + +#brooklynbridge { + background-image: url("../img/bridge-large-no-title.png"); + background-repeat: no-repeat; + background-position: center; + width: 342px; + height: 242px; +} + +#footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + padding-top: 1em; + padding-bottom: 1em; + background-color: #f5f5f5; + text-align: center; +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/deps/bootstrap-theme.css ---------------------------------------------------------------------- diff --git a/docs/style/deps/bootstrap-theme.css b/docs/style/deps/bootstrap-theme.css new file mode 100644 index 0000000..a2936d2 --- /dev/null +++ b/docs/style/deps/bootstrap-theme.css @@ -0,0 +1,346 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-success:hover, +.btn-success:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #4cae4c; + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #4cae4c 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #4cae4c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff4cae4c', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #449d44; + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #48a648 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #48a648 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff48a648', GradientType=0); + background-repeat: repeat-x; + border-color: #48a648; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #4cae4c 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #4cae4c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff4cae4c', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/deps/bootstrap.css ---------------------------------------------------------------------- diff --git a/docs/style/deps/bootstrap.css b/docs/style/deps/bootstrap.css index cfe2b90..deb2231 100644 --- a/docs/style/deps/bootstrap.css +++ b/docs/style/deps/bootstrap.css @@ -5782,4 +5782,3 @@ button.close { display: none !important; } } -/*# sourceMappingURL=bootstrap.css.map */ http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/img/apache-brooklyn-logo-244px-wide.png ---------------------------------------------------------------------- diff --git a/docs/style/img/apache-brooklyn-logo-244px-wide.png b/docs/style/img/apache-brooklyn-logo-244px-wide.png new file mode 100644 index 0000000..7434e7a Binary files /dev/null and b/docs/style/img/apache-brooklyn-logo-244px-wide.png differ http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/img/apache-brooklyn-logo-817px-wide.png ---------------------------------------------------------------------- diff --git a/docs/style/img/apache-brooklyn-logo-817px-wide.png b/docs/style/img/apache-brooklyn-logo-817px-wide.png new file mode 100644 index 0000000..65cfff4 Binary files /dev/null and b/docs/style/img/apache-brooklyn-logo-817px-wide.png differ http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/img/bridge-large-no-title.png ---------------------------------------------------------------------- diff --git a/docs/style/img/bridge-large-no-title.png b/docs/style/img/bridge-large-no-title.png new file mode 100644 index 0000000..0a7f878 Binary files /dev/null and b/docs/style/img/bridge-large-no-title.png differ http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/js/_readme.txt ---------------------------------------------------------------------- diff --git a/docs/style/js/_readme.txt b/docs/style/js/_readme.txt new file mode 100644 index 0000000..bed81ec --- /dev/null +++ b/docs/style/js/_readme.txt @@ -0,0 +1,2 @@ +underscore files are kept here because the path is referenced by catalog items. +TODO regenerate catalog with correct path (in deps/). http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b86cbf04/docs/style/js/underscore-min.js ---------------------------------------------------------------------- diff --git a/docs/style/js/underscore-min.js b/docs/style/js/underscore-min.js new file mode 100644 index 0000000..11f1d96 --- /dev/null +++ b/docs/style/js/underscore-min.js @@ -0,0 +1,6 @@ +// Underscore.js 1.7.0 +// http://underscorejs.org +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e =0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n, function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(va r o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=func tion(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.l ength-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.p ush(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.c all(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.de fer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return-- n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(argume nts,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i =r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h. isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=funct ion(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source] .join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]= function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this); +//# sourceMappingURL=underscore-min.map \ No newline at end of file