movabletype注意点

1: movabletypeの、default_templates/gwj_css_design.mtml を,design.cssで置き換え

2: /css/img/をアップする(オプションで場所を変更できるようにしたい!!!)

3: /css/icon/をトップサイトアップ(エモーション用:cssから相対パスで指定)管理画面ドメイントップにフォルダごとおく(imgは絶対パスで指定)

忍者BLOCKエディタ1
課題その1

※素のテキストデータが入っている場合、テキストボックス扱いにする

検討:PDfをブロック削除した場合、フォルダごと削除するようにしていない。

削除後に変更保存せず、終了したケースを想定している。保存ボタンをフックに削除実行するスクリプトを追加する必要あり!


回転・切り抜き
サイズ変更
位置調整
画像の変更
キャプション(説明)

忍者BLOCKエディタテスト
課題その2

※設置ドメイン・ディレクトリを変更したときの対応策をどうするか?

※PDFのデータ

nJa_.func.changeTargetColor -> nJa_.func.changeBarAction に置き換え

忍者JSONエディタテスト
忍者JSONエディタ:Movabletype対応録

吹き出し画像は、footer_js.tmplで渡す!


//footer_js.tmpl
nJa_.json.faceimg = '<$MTBlogSetting encode_php="q"$>';

nJa_.json.faceimg = '<$MTBlogSetting encode_php="q"$>';


受け取り・・・


  $('#njademo2').nja_blockeditor({
    debug: true,
    setbuble: {tmpl_bbl:nJa_.func.makefacebar(nJa_.json.faceimg)},
  });

採用しなかったけど、こんな方法もある

//MT管理画面で所属サイトID取得し、モジュールを読み込む






Croppieのクロスオリジン問題、以下で解決

参考:画像とキャンバスをオリジン間で利用できるようにする

//htaccessでクロスオリジン要求を許可(画像のみ)

 
 
      
        SetEnvIf Origin ":" IS_CORS
        Header set Access-Control-Allow-Origin "https://<$MTCGIHost$>" env=IS_CORS
      
 
 

movabletypeでJSON.stringifyがまともに機能しない。
原因はprototype????
pollifil = json3.jsを導入 -> JSON.stringify -> JSON3.stringifyに変更して解決

興味深い話題:古いprototype.jsがJSON.stringifyを破壊する!!

上記によると、「Prototype.jsは Array.prototype.toJSON を定義していて、かつ特定のバージョンではその実装にバグがあるために JSON.stringify() の挙動を破壊してしまう」

ピンポイントに v1.6.0.3で発生しているバグらしい。v1.7.0 では修正された模様。

MT上で$でjQueryが利用できないのは、prototype.jsとのバッティングを避けるためだと思われるが、MT上でprototype.jsそのものの読み込みは確認できない。jquery.json.js で定義されている $.toJSON = function も怪しい。

//コードの素を探る
console.log(JSON.stringify.toString());
//しかし、JSON.stringifyが破壊されているのだから、無理でない?

movabletypeで「pdf.js」がまともに機能しない。mt_core_compact.jsが原因

JSON.stringify破壊も、mt_core_compact.jsでの、Array.prototype.toJSONが問題だったのかも

こちらの対処方法(Array.prototype causing error)で「mt_core_compact.js」の該当箇所を書き換えて解決

「pdf.js」で警告された箇所のみ書き換えで「pdf.js」は動作するようになったが、Array.prototypeの上書きが他にも多数存在しているので、そちらの書き換えも必要かもしれない。

//before
  Array.prototype.contains = function(v) {
    for (var i = 0; i < this.length; i++) {
      if (this[i] === v) return true;
    }
    return false;
  };

//after
  Object.defineProperty(Array.prototype, 'contains', {
      enumerable: false,
      value: function(v) {
          for (var i = 0; i < this.length; i++) {
              if (this[i] === v) return true;
          }
          return false;
      }
  });

こちらで記述されているポリフィル記述の方が適切なのかもしれない。

JavaScriptのオブジェクトプロパティの隠し属性も知っておく必要があるっぽい。

//after

  if (!Array.prototype.find) {
    Object.defineProperty(Array.prototype, 'find', {



      configurable: true,
      writable: true
    });
  }