ラベル javascript の投稿を表示しています。 すべての投稿を表示
ラベル javascript の投稿を表示しています。 すべての投稿を表示

2012年4月2日月曜日

bootstrapをmake(lesscとuglifyjsをインストール)

githubのtwitter-bootstrapをビルドしたのでメモ。

Makefileがあるのでmakeコマンドでlessからcss(bootstrap.min.css)と、各モジュール毎にバラバラに用意されているファイルをまとめ、さらに圧縮されたjavascriptファイル(bootstrap.min.js)を作成することが出来る。簡単だけど、環境を用意する必要がある。

  • lessc
    lessコンパイラ。lessファイルからcssファイルを生成する。
  • uglify-js
    javascript圧縮ツール。

lesscもuglify-jsもnode.jsベースのコマンドラインツールなので、node.jsのインストールから行う必要がある。

Windowsではとてもめんどくさかったけど、Macではhomebrew使って簡単だった。Macでよかった。

環境整備

  1. node.jsをインストール。brewコマンド(homebrew)は予め用意しておく必要があります。
    [150]% brew install node
    ==> Downloading http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz
    ######################################################################## 100.0%
    ==> ./configure --prefix=/usr/local/Cellar/node/0.6.14 --without-npm
    ==> make install
    ==> Caveats
    Homebrew has NOT installed npm. We recommend the following method of
    installation:
    curl http://npmjs.org/install.sh | sh
    After installing, add the following path to your NODE_PATH environment
    variable to have npm libraries picked up:
    /usr/local/lib/node_modules
    ==> Summary
    /usr/local/Cellar/node/0.6.14: 80 files, 7.6M, built in 7.0 minutes
    [151]% 
    
    
    
  2. npmをインストール
    [153]% curl http://npmjs.org/install.sh | sh
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 7881 100 7881 0 0 9741 0 --:--:-- --:--:-- --:--:-- 22013
    tar=/usr/bin/tar
    version:
    bsdtar 2.8.3 - libarchive 2.8.3
    install npm@1.1
    fetching: http://registry.npmjs.org/npm/-/npm-1.1.15.tgz
    0.6.14
    1.1.15
    cleanup prefix=/usr/local
    All clean!
    /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
    npm@1.1.15 /usr/local/lib/node_modules/npm
    It worked
    [154]% 
    
    
    
  3. npmでlesscとuglify-jsをインストール。-gオプションをつけると/usr/local/binにインストールしてくれる。
    [156]% [156]% npm install less uglify-js -g
    npm http GET https://registry.npmjs.org/less
    npm http 200 https://registry.npmjs.org/less
    npm http GET https://registry.npmjs.org/less/-/less-1.3.0.tgz
    npm http 200 https://registry.npmjs.org/less/-/less-1.3.0.tgz
    /usr/local/bin/lessc -> /usr/local/lib/node_modules/less/bin/lessc
    less@1.3.0 /usr/local/lib/node_modules/less
    
    npm http GET https://registry.npmjs.org/uglify-js
    npm http 200 https://registry.npmjs.org/uglify-js
    npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
    npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
    /usr/local/bin/uglifyjs -> /usr/local/lib/node_modules/uglify-js/bin/uglifyjs
    uglify-js@1.2.6 /usr/local/lib/node_modules/uglify-js
    
    [157]% 
    
    
    これで準備OK。

bootstrapをビルド

  1. とりあえずgithubから取得
    [126]% git clone https://github.com/twitter/bootstrap.git
    Cloning into 'bootstrap'...
    remote: Counting objects: 16437, done.
    remote: Compressing objects: 100% (5901/5901), done.
    remote: Total 16437 (delta 11451), reused 15137 (delta 10358)
    Receiving objects: 100% (16437/16437), 10.75 MiB | 248 KiB/s, done.
    Resolving deltas: 100% (11451/11451), done.
    
    
    
  2. Makefileがおかしい気がする。make docsしてからmake bootstrapしないとうまくいかないかも。
    [268]% cd bootstrap
    [269]% make bootstrap
    mkdir -p bootstrap/img
    mkdir -p bootstrap/css
    mkdir -p bootstrap/js
    cp img/* bootstrap/img/
    lessc ./less/bootstrap.less > bootstrap/css/bootstrap.css
    lessc --compress ./less/bootstrap.less > bootstrap/css/bootstrap.min.css
    lessc ./less/responsive.less > bootstrap/css/bootstrap-responsive.css
    lessc --compress ./less/responsive.less > bootstrap/css/bootstrap-responsive.min.css
    cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js > bootstrap/js/bootstrap.js
    uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.js
    echo "/**\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js
    cat bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js > bootstrap/js/bootstrap.min.js
    rm bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js
     
    [270]% ls bootstrap/*
    bootstrap/css:
    bootstrap-responsive.css bootstrap.css
    bootstrap-responsive.min.css bootstrap.min.css
    
    bootstrap/img:
    glyphicons-halflings-white.png glyphicons-halflings.png
    
    bootstrap/js:
    bootstrap.js bootstrap.min.js
    [271]%
    
    
    bootstrapディレクトリの下にcssとjavascriptが生成されている。bootstrap-responsive.min.cssはレンスポンシブデザインのcss。

2012年2月25日土曜日

bloggerでシンタックスハイライト

今後意欲的にブログを書こうかと思うけど、下準備として細かい懸念点を解決しておきたい。

まずは、ソースコードやコマンドをシンタックスで色分けして表示したい。

こういうの

bloggerの基本機能ではもちろんそのようなものは見つからなかったので、調べました。
そして解決まで苦労したのでメモしておくことにします。

よしけんActivity: まずBloggerにSyntax Highlighter 3.0を適用してみる
など参考にさせてもらいました。

仕組みとしては、指定されたタグの中をJavaScriptで解析してクラス定義し、テーマとして用意したcssで色付けされているような感じ。jsファイルなどは外部サイトを直接参照することになるので、特にダウンロードなど必要ありません。テンプレートに読み込み指定のタグをちょちょいと書いておけばいいだけ。

ここからテンプレートのheadタグに埋め込むhtmlソースコードを取得します。
GENERATE SCRIPTSっていうボタンからジェネレータに飛んで以下の通りに取得してください。

  1. 乱暴ですけどテーマと必要な言語を全て選び 
  2. Copy To ClipBoardボタンを押してクリップボードにコピーしておきます。

次にテンプレートの編集です。
  1. bloggerの設定画面のテンプレートから「HTMLの編集」をクリック
  2. なんか言われるけど続行
  3. headタグを検索して、閉じる直前にコピーしておいたコードをペースト!

これで設定完了。ブログのHTMLソースを開いて、preタグを以下のようにclass指定しながら使うとハイライティングしてくれます。
<pre class="brush: python" title="Python大好き" >
pythonのコードを表示すると以下の通り。
#!/usr/bin/env python
# coding:utf-8

"""
サンプルソースコードだよ
"""

import os

for name in os.listdir("./"):
    if not os.path.isdir(name):
        continue
    if not os.path.isfile(u"%s/%s.txt" % (name, name)):
        continue

    cmd = u"ls"
    print cmd
    os.system(cmd)

# EOF




せっかくだからテンプレートに加えるタグの解説も入れておこう。



<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDjango.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
というような構成になっているので、自分で対応言語を増やしたい場合にも対応しやすい。なかなかいい構成。
以上。