Develop and Download Open Source Software

Browse Subversion Repository

Diff of /js/domain.js

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 6 by berupon, Sat Dec 5 02:36:36 2009 UTC revision 9 by berupon, Tue Dec 8 10:46:33 2009 UTC
# Line 81  behaviourAssignors['sales_code'] = funct Line 81  behaviourAssignors['sales_code'] = funct
81  }  }
82    
83    
84  function setAutoFocus()  function setAutoFocus() {
 {  
85          var cnt = document.forms.length;          var cnt = document.forms.length;
86          for (var i=0; i<cnt; ++i) {          for (var i=0; i<cnt; ++i) {
87                  var form = document.forms[i];                  var form = document.forms[i];
# Line 114  function setAutoFocus() Line 113  function setAutoFocus()
113    
114  Event.observe(window, "load", setAutoFocus);  Event.observe(window, "load", setAutoFocus);
115    
116  function toDateFormat(num)  function toDateFormat(num) {
 {  
117          if (num.match(/\d{8,8}/)) {          if (num.match(/\d{8,8}/)) {
118                  var year = Math.floor(num / 10000);                  var year = Math.floor(num / 10000);
119                  var remain = num % 10000;                  var remain = num % 10000;
# Line 133  function toDateFormat(num) Line 131  function toDateFormat(num)
131          }          }
132  }  }
133    
134    function windowEvent() {
 function windowEvent(){  
135          if (window.event) return window.event;          if (window.event) return window.event;
136          var caller = arguments.callee.caller;          var caller = arguments.callee.caller;
137          while (caller) {          while (caller) {
# Line 185  function ajaxRequest(url, method, parame Line 182  function ajaxRequest(url, method, parame
182          );          );
183  }  }
184    
185  // 列の表示切り替え&並び替え用、templateの文字列時点で入れ替えを行う  // 列の表示切り替え&並び替え用、DOMにする前に templateの文字列時点で入れ替えを行う
186  function modifyTemplate(src, data)  //
187  {  // 以下概要
188    //   # で始まる行を対象として処理を行う。
189    //   #hoge{ でhogeグループ開始
190    //   グループ中の#key1 で始まる行頭から次の#key2 で始まる行頭までを key1 要素とする。
191    //   #} でグループ終了。
192    //   引数の data 中の hoge 配列の値どうりに、key要素を出現させていく。
193    //
194    function modifyTemplate(src, data) {
195          var r = /^#/gm;          var r = /^#/gm;
196          var r2 = /^[^\s]+/g;          var r2 = /^[^\s]+/g;
197          var indexes = [];          var indexes = [];
# Line 200  function modifyTemplate(src, data) Line 204  function modifyTemplate(src, data)
204                  return src;                  return src;
205          }          }
206                    
207          function attachParts(pieces, parts, setting)          function attachParts(pieces, parts, setting) {
         {  
208                  if (!setting) {                  if (!setting) {
209                          for (var j=0; j<parts.length; ++j) {                          for (var j=0; j<parts.length; ++j) {
210                                  var part = parts[j];                                  var part = parts[j];
# Line 263  function modifyTemplate(src, data) Line 266  function modifyTemplate(src, data)
266          return pieces.join("");          return pieces.join("");
267  }  }
268    
269    // cookie中の指定した名前の値をObjectとして取り出し。JSON形式で格納されている事前提。
270  function digestCookie(key) {  function digestCookie(key) {
271          var pieces = document.cookie.split('; ');          var pieces = document.cookie.split('; ');
272          for (var i=0; i<pieces.length; ++i) {          for (var i=0; i<pieces.length; ++i) {
# Line 275  function digestCookie(key) { Line 279  function digestCookie(key) {
279          return {};          return {};
280  }  }
281    
282    // cookieに指定した名前で値を保存。JSON形式で格納。
283  function dumpCookie(key, value) {  function dumpCookie(key, value) {
284          if (!Object.isString(value)) {          if (!Object.isString(value)) {
285                  value = Object.toJSON(value);                  value = Object.toJSON(value);
# Line 320  function getGridSetting(visibles) { Line 325  function getGridSetting(visibles) {
325          return collectMember(visibles.options, 'value');          return collectMember(visibles.options, 'value');
326  }  }
327    
328    // Application クラス
329    // グローバル変数 app の予約。
330    if (app != undefined) {
331            alert("error: global variable 'app' is already defined.");
332    }
333    var app = null;
334    Application = function () {
335            if (app) {
336                    return;
337            }
338            
339            /// private ///
340            
341            var box = null;
342            var contents = null;
343            Event.observe(window, "load", function () {
344                    contents = $('contents');
345            });
346            var draggable = new Draggable();
347            var popup = new ModalPopUp();
348            
349            // AJAXによる擬似ページ読込処理
350            function loadPage(dest, params) {
351                    ajaxRequest(
352                            dest,
353                            'get',
354                            params,
355                            function(transport) {
356                                    app.pageLoadHandler = null;
357                                    box = document.createElement("div");
358                                    box.innerHTML = transport.responseText;
359                                    contents.appendChild(box);
360                                    var title = $("pageTitle").innerHTML;
361                                    document.title = "#{APP_TITLE}" + ' ' + title;
362                                    var loc = app.getPathFromLocationHash();
363                                    $("title").innerHTML = title;
364                            //      $("breadcrumbs").innerHTML = loc.split('/').join(' / ');
365                                    if (Prototype.Browser.IE || Prototype.Browser.WebKit || Prototype.Browser.Opera) {
366                                            var texts = new Array();
367                                            var scripts = box.getElementsByTagName("script");
368                                            for (var i=0; i<scripts.length; ++i) {
369                                                    var script = scripts[i];
370                                                    texts.push(script.text);
371                                            }
372                                            var script = document.createElement("script");
373                                            script.text = texts.join("\r");
374                                            box.appendChild(script);
375                                    }
376                                    if (app.pageLoadHandler) {
377                                            app.pageLoadHandler();
378                                    }
379                                    app.setHelpers();
380                            },
381                            function () {
382                                    alert("ページ読み込み失敗");
383                            }
384                    );
385            }
386            
387            // location.hash を監視して変更されていたらpathに相当する擬似ページをAJAXで読み込む。
388            var prevHash = "nullpo";
389            var timerID = setInterval(checkLocationHash, 10);
390            function checkLocationHash() {
391                    if (location.hash != prevHash) {
392                            if (box) {
393                                    popup.hide();
394                                    popup.clear();
395                                    if (app.pageUnloadHandler) {
396                                            var ret = app.pageUnloadHandler();
397                                            if (ret) {
398                                                    dumpCookie(prevHash, ret);
399                                            }
400                                    }
401                                    contents.removeChild(box);
402                                    app.pageUnloadHandler = null;
403                            }
404                            prevHash = location.hash;
405                            if (location.hash == "" || location.hash == "#") {
406                                    loadPage("menu", {});
407                            }else {
408                                    var pagePath = location.hash.substr(1, location.hash.length);
409                                    loadPage(pagePath, {});
410                            }
411                    }
412            }
413            
414            /// public ///
415            
416            // 擬似ページの読込時に呼び出すコールバック。
417            this.pageLoadHandler = null;
418            
419            // 擬似ページの破棄時に呼び出すコールバック。戻り値が有る場合はcookieに保存
420            this.pageUnloadHandler = null;
421            
422            // Modal PopUp 用の処理
423            this.showPopup = function () {
424                    popup.show();
425            };
426            
427            this.hidePopup = function () {
428                    popup.hide();
429            };
430            
431            this.setPopup = function (elem) {
432                    popup.elem.appendChild(elem);
433            };
434            
435            // 入力補助等のevent handlers設定
436            this.setHelpers = function () {
437                    setAutoFocus();
438                    draggable.attach();
439                    ResizableColumns();
440                    assignBehaviours();
441            };
442            
443            this.getPathFromLocationHash = function () {
444                    var url = location.hash;
445                    return url.substr(1, url.length);
446            };
447            
448            // hash指定によるページ切り替え処理
449            // this routine understands relative path
450            this.moveLocation = function (path) {
451                    var curHash = location.hash;
452                    if (path.substr(0,1) == '/') {
453                            location.hash = path.substr(1,path.length);
454                    }else {
455                            var upLevel = 0;
456                            while (1) {
457                                    if (path.substr(0, 3) == '../') {
458                                            ++upLevel;
459                                            path = path.substr(3, path.length);
460                                    }else {
461                                            break;
462                                    }
463                            }
464                            var curPath = location.hash;
465                            curPath = curPath.substr(1, curPath.length);
466                            var parts = curPath.split('/');
467                            parts = parts.slice(0, parts.length - (upLevel+1));
468                            var newPath = parts.join('/');
469                            if (newPath) {
470                                    newPath += '/';
471                            }
472                            newPath += path;
473                            location.hash = newPath;
474                    }
475            };
476            
477            // postによるデータ登録処理。エラー時にメッセージ表示を行うElementを用意する事。
478            var okToPost = true;
479            this.postRequest = function (params) {
480                    if (!okToPost) {
481                            alert("ただいま結果待ちな為送信出来ません。");
482                            return;
483                    }
484                    if (params instanceof HTMLFormElement) {
485                            params = Form.serialize(params, true);
486                    }
487            //      alert(Object.toJSON(params));
488                    ajaxRequest(
489                            this.getPathFromLocationHash(),
490                            'post',
491                            params,
492                            function(transport) {
493                                    var ret = transport.responseJSON;
494                                    if (!ret) {
495                                            alert(transport.responseText);
496                                    }
497                                    if (ret.errors.length) {
498                                            $("messages").innerHTML = ret.errors.join("<BR>");
499                                            $("error").appear({ duration: 1.0 });
500                                    }else {
501                                            this.moveLocation("list");
502                                    }
503                                    okToPost = true;
504                            },
505                            function () {
506                                    alert('Something went wrong...')
507                                    okToPost = true;
508                            }
509                    );
510                    okToPost = false;
511            };
512            
513            // template文字列は指定要素の最初の要素であるHTML comment中にあるという前提。
514            this.templateUpdate = function (templateEl, updateEl, data) {
515                    var comment = templateEl.firstChild;
516                    var src = comment.data;
517                    src = modifyTemplate(src, data);
518                    var template = new EJS({text: src});
519                    template.update(updateEl, data);
520            };
521    
522    };
523    
524    app = new Application();
525    

Legend:
Removed from v.6  
changed lines
  Added in v.9

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26