Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

pugでmixinを使いリンクリストめいたものをだす

pugでmixinを使いリンクリストめいたものをだす方法です。
mixinはテンプレートみたいなもんです。

実際のところ

Idで内部リンクするような事例の場合、
以下のような書き方でいけます。

      mixin link-block
        .container
          .row
            .col-xs-12
              a(href=arguments[0], data-role='button')=arguments[1]
              
      +link-block("#page3", "りんご")
      +link-block("#page4", "ごりら")
      +link-block("#page5", "らっぱ")
      +link-block("#page6", "ぱいなっぷる")
      +link-block("#page7", "(がんば)るびぃ")

参考もと

Mixins – Pug

Fusion360でインポートしたデータに警告マークがつき始めた場合……リンクが上手く行ってないのかも

Fusion360ではインポートという、他のファイルで編集したオブジェクトをリンクさせる便利機能があります。
が、これはリンク先の編集状態を掌握しており……差分が発生すると警告マークをだします。
f:id:shuzo_kino:20170202231656p:plain
この警告マークはリンク先と同期させる事で消す事が可能です。。
でてるオブジェクトを右クリックし「最新を取得」。
すこしロード時間が必要ですが、これで完了です。
f:id:shuzo_kino:20170202231700p:plain

Git で特定のコミットやtagの状態だけcloneしたい……ときでも素直に全部やっといたほうが良い

Git で特定のコミットやtagの状態だけcloneしたいなんてのは、割りと良くある話。
探すとコマンドが出て来るっぽいですが、その後の不整合を考えると

実際のところ

執筆時点において、Salesforce mobile SDKの最新版は5.0です。
が、参考にしているサンプルシステム当時は旧版だったようで不整合がおきてました。
仕方がないので、当時のを引っ張ってくる方法を考えます。
まずは、本家の手順書通りGit clone。

$ git clone https://github.com/forcedotcom/SalesforceMobileSDK-CordovaPlugin

後はtagを検索するなりして、必要なIDを調べます。
今回のターゲットであるv4.3.1の最終版のコードは以下の通りでした。

$ git reset --soft d47bb564643f9231a4d9d544dd8ecb86e9a4b181

gulpを入れたionicでserveした際に"WARN: No 'serve:before' gulp task found!"とかでたら

gulpを導入したionic環境でserveをやると、以下のようなエラーが出ることがあります。

WARN: No 'serve:before' gulp task found!
If your app requires a build step, you may want to ensure it runs before serve.

冷静にエラーを見ればわかりますが、serveの実行前に読み出されるserve:beforeに何ら定義が無いのが原因です。
ほっといても問題はおこらないです。
気になる場合や自前タスクをやりたい場合、gulpfile.jsに追記します。
以下の例だと、defaultというタスクが呼び出されます。
定義されていないなら、何も起こりません。

gulp.task('serve:before', ['default']);

この状態でionic serveすると、上記のトコが綺麗になります。

Running 'serve:before' gulp task before serve

GitでN個前からの変更差分を調べる

一寸前の記事でN日前の差分を取る奴をやりました。
shuzo-kino.hateblo.jp
では、その日にやった……というか数分前にコミットした差分はどうするんでしょうか?

実際のところ

N日前と同様HEADに細工をします。
たとえば、四個前のdiffは以下のように"^"を4個くっつけます。

$ git diff HEAD^^^^

参考もと

  • git diff --help

ionic-datepickerを実装する

Ionicでカレンダー選択式のスゴイUIを提供してくれるionic-datepickerをionic1環境で使うための方法です。
Angular弱者の僕なので非常に苦戦しましたが、ようやく動いたのでメモ。

実際のところ

Salesforce提供の雛形を、たたき台にしたプロジェクトでHogeというページにdatepickerを実装する場合を想定します。
ちゃんと動くと、こんな感じになるはずです(公式より引用)
f:id:shuzo_kino:20170129234512p:plain

導入

プロジェクトのルートで

$ npm install ionic-datepicker --save
$ cp node_modules/ionic-datepicker/dist/ionic-datepicker.bundle.min.js www/js/

www/js/controller.js

どこぞの莫迦のようにfromとtoを現実離れした値にしないようにしてください。
日付選択ができず不毛な原因究明をする羽目になります。

angular.module('starter.controllers', ['forceng', 'ionic-datepicker'])
    // ...
    .controller('HogeCtrl', function ($scope, ionicDatePicker) {
	var ipObj1 = {
	    callback: function (val) {  //Mandatory
		if (typeof(val) === 'undefined') {
		    console.log('No date selected');
		} else {
		    console.log('Return value from the datepicker popup is : ' + val, new Date(val))
		},
	    from: new Date(2011, 1, 1),
	    to: new Date(2099, 12, 31),
	    inputDate: new Date(), 
	    mondayFirst: true,
	    disableWeekdays: [0],
	    closeOnSelect: false,
	    showTodayButton: true,
	    templateType: 'popup'
	};

	$scope.openDatePicker = function(){
	    ionicDatePicker.openDatePicker(ipObj1);
	};
    })
    // ...

www/index.html

メインに先程の手順でぶっ込んだJSを入れます。
ただ、jQueryが必須なので先に。
場所はHEADでもBODYでもお好きな方で。

    <script
        src="https://code.jquery.com/jquery-3.1.1.min.js"
        integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
        crossorigin="anonymous"></script>

    <script src="js/ionic-datepicker.bundle.min.js "></script>

www/template/hoge.html

ボタンで起動させる場合、ng-clickでイベントを発火させてやらんといけません。
functionをよびだすので"()"をつけるのを忘れずに。

//...
    <ion-content>
//...
	<ionic-datepicker input-obj="datepickerObject">
	    <button class="button button-block button-positive" ng-click="openDatePicker()"> {{datepickerObject.inputDate | date:'dd - MMMM - yyyy'}}</button>
	</ionic-datepicker>
    </ion-content>
//...

includeしたpugファイルがError: ENOENT: no such file or directory, stat '/{DIST}/.#_pagename.pug'とか出たら、部分ファイルの保存にしくじってる

$ cordova emulate ios
Error: ENOENT: no such file or directory, stat '/Users/shuzo_kino/salesforce/contactsApp/www/.#_page7.pug'

この場合、pugのinclude先である_page7.pugがブロックしてる可能性があります。
ちゃんと保存してあげると消えます。