Development

Changeset 21489

You must first sign up to be able to contribute.

Changeset 21489

Show
Ignore:
Timestamp:
08/27/09 09:45:58 (4 years ago)
Author:
ornicar2
Message:

many improvments, especially on front edition and rich text widgets.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/diemPlugin/trunk/TODO

    r21473 r21489  
    3939* improve zone/widget drag&drop design in front edition 
    4040 
    41 * open & select current page in front page tree 
     41* open & select current page in front page tree, and open home in admin page tree 
    4242 
    4343* fix fast navigation in admin edit pages 
     
    4545* fix widget drop into zones don't work when page were loaded without edit mode 
    4646 
    47 * allow admin list booleans ajax edition 
     47* allow admin list booleans ajax edition ( and maybe other kind of data like simple text ? ) 
    4848 
    4949* fix first delete link in admin record edit page : javascript confirmation fails 
     
    6969* fix admin pagination. when a table has relations, pagination count is false ( 8 elements in place of 10 for example ) 
    7070 
    71 * include a default ready to use search engine 
     71* [DONE] include a default ready to use search engine 
    7272 
    73 * create a check config page like http://iliaz.com/dmsPlugin/index.php 
     73* [DONE] create a check config page like http://iliaz.com/dmsPlugin/index.php 
    7474 
    7575* improve record loremizer. Currently when only one record is loremized, associations with other tables are not created. 
     
    8888 
    8989* use Zend Code Generator to create/update front modules 
     90 
     91* add the text widget 
     92 
     93* {INTERNET} front edit : dynamically load widget forms js & css ( tabs, markdown... ) for performance reasons 
     94 
     95* front edit dmWidgetMedia is broken : can not add a file by upload 
     96 
     97* sfWidgetFormDmDate should extend sfWidgetFormI18nDate instead of currently sfWidgetFormDate 
  • plugins/diemPlugin/trunk/dmAdminPlugin/modules/dmAdminGenerator/templates/_markdown.php

    r21423 r21489  
    3030    <label class="fnone"><?php echo __('Preview'); ?></label> 
    3131    <div class="markdown_preview markdown"> 
    32       <?php echo dmMarkdown::get($form->getObject()->$getter())?> 
     32      <?php echo dmMarkdown::toHtml($form->getObject()->$getter())?> 
    3333    </div> 
    3434  </div> 
  • plugins/diemPlugin/trunk/dmCorePlugin/config/dm/assets.yml

    r21423 r21489  
    88    editCtrl:         dmCoreEditCtrl 
    99    form:             dmCoreForm 
     10    tabForm:          dmCoreTabForm 
    1011    toolBar:          dmCoreToolBar 
    1112    pageBar:          dmCorePageBar 
  • plugins/diemPlugin/trunk/dmCorePlugin/data/i18n/en_fr.yml

    r21423 r21489  
    193193"Show page structure": "Afficher la structure de la page" 
    194194"Generate sitemap": "Générer le sitemap" 
     195"Links": "Liens" 
  • plugins/diemPlugin/trunk/dmCorePlugin/lib/dm.php

    r21423 r21489  
    4343      case 'markdown': 
    4444        require_once(implode(DIRECTORY_SEPARATOR, array(dm::getDir(), 'dmCorePlugin', 'lib', 'markdown', 'dmMarkdown.php'))); 
    45         print isset($_REQUEST['text']) ? dmMarkdown::get($_REQUEST['text']) : ''; 
     45        print isset($_REQUEST['text']) ? dmMarkdown::toHtml($_REQUEST['text']) : ''; 
    4646        break; 
    4747      default: 
  • plugins/diemPlugin/trunk/dmCorePlugin/lib/markdown/dmMarkdown.php

    r21423 r21489  
    88  protected static $instance; 
    99 
    10   public static function get($text) 
     10  public static function toHtml($text) 
    1111  { 
    1212    if(is_null(self::$instance)) 
     
    2020  public static function toText($text) 
    2121  { 
    22     return strip_tags(self::get($text)); 
     22    return strip_tags(self::toHtml($text)); 
    2323  } 
    2424 
    2525  public function transform($text) 
    2626  { 
    27     $text = $this->preTransform($text); 
    28  
    29     $text = parent::transform($text); 
    30  
    31     $text = $this->postTransform($text); 
    32  
    33     return $text; 
     27    return self::postTransform(parent::transform(self::preTransform($text))); 
    3428  } 
    3529 
    36   protected function preTransform($text) 
     30  protected static function preTransform($text) 
    3731  { 
    3832    // clean text 
    39     $text = $this->cleanText($text); 
     33    $text = self::cleanText($text); 
    4034 
    4135    // replace lines with only a dot by a <br /> 
     
    4842  } 
    4943 
    50   protected function postTransform($text) 
     44  protected static function postTransform($text) 
    5145  { 
    5246 
     
    5448  } 
    5549 
    56   protected function cleanText($text) 
     50  protected static function cleanText($text) 
    5751  { 
    5852    return strtr($text, array( 
    59         "\r"      => ""      // réparation des sauts de ligne mac/windows 
    60       , "\t"      => "  "    // tabs -> double espace 
    61       , "&#8217;" => "'"     // apostrophe 
     53        "&#8217;" => "'"     // apostrophe 
    6254      , '“'       => '&lquot;' 
    6355      , '”'       => '&rquot;' 
  • plugins/diemPlugin/trunk/dmCorePlugin/lib/model/doctrine/media/PluginDmMediaFolderTable.class.php

    r21423 r21489  
    3030        'rel_path' => $relPath 
    3131      )); 
    32  
    33       $record->getNode()->insertAsLastChildOf($parent); 
     32       
     33      $record->Node->insertAsLastChildOf($parent); 
    3434    } 
     35     
    3536    return $record; 
    3637  } 
  • plugins/diemPlugin/trunk/dmCorePlugin/lib/search/plugin/dmSearchIndex.php

    r21446 r21489  
    11<?php 
     2 
     3require_once('Zend/Search/Lucene.php'); 
    24 
    35abstract class dmSearchIndex extends dmSearchIndexCommon 
  • plugins/diemPlugin/trunk/dmCorePlugin/lib/view/html/media/dmMediaTag.php

    r21423 r21489  
    1010    $resource = new dmMediaResource($source); 
    1111 
     12    if (!$resource->getSource()) 
     13    { 
     14      throw new dmException(sprintf( 
     15        'Can not display media wich has no source' 
     16      )); 
     17    } 
     18 
    1219    $mediaClass = 'dmMedia'.dmString::camelize($resource->getMime()).'Tag'; 
    13  
     20     
    1421    if (!class_exists($mediaClass) || $mediaClass === 'dmMediaTag') 
    1522    { 
  • plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCoreEditPlugins.js

    r21423 r21489  
    126126   * Make ui dialogs fixed 
    127127   */ 
    128    
    129128  if ($.ui.dialog)  
    130129  { 
  • plugins/diemPlugin/trunk/dmCorePlugin/web/js/dmCorePlugins.js

    r21423 r21489  
    11(function($) 
    22{ 
     3  var isFirstDebug = true; 
    34 
    45  $.dbg = function() 
    56  { 
     7    /* 
     8     * Fix firefox 3.6 alpha firebug bug 
     9     */ 
     10    if (isFirstDebug) 
     11    { 
     12      try  
     13      { 
     14        console.debug('dm : start debugging'); 
     15      } 
     16      catch(e) 
     17      { 
     18         
     19      } 
     20       
     21      isFirstDebug = false; 
     22    } 
    623    if (!$.dm.ctrl.options.debug)  
    724    { 
     
    1229      console.debug(arguments); 
    1330    }  
    14     catch (e)  
     31    catch(e)  
    1532    { 
     33       
     34      alert(e); 
    1635      for (var i in arguments)  
    1736      { 
  • plugins/diemPlugin/trunk/dmCorePlugin/web/lib/dmMarkitup/sets/markdown/set.js

    r21423 r21489  
    1 // ------------------------------------------------------------------- 
    2 // markItUp! 
    3 // ------------------------------------------------------------------- 
    4 // Copyright (C) 2008 Jay Salvat 
    5 // http://markitup.jaysalvat.com/ 
    6 // ------------------------------------------------------------------- 
    7 // MarkDown tags example 
    8 // http://en.wikipedia.org/wiki/Markdown 
    9 // http://daringfireball.net/projects/markdown/ 
    10 // ------------------------------------------------------------------- 
    11 // Feel free to add more tags 
    12 // ------------------------------------------------------------------- 
    131dmMarkitupMarkdown = { 
    142  previewParserPath:  '', 
  • plugins/diemPlugin/trunk/dmCorePlugin/web/lib/jquery-ui/js/jquery-ui-1.7.2.front.min.js

    r21423 r21489  
    6060 */ 
    6161(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery); 
     62/* jQuery UI Tabs */ 
     63(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery); 
     64/* jQuery UI Resizable */ 
     65(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmFilter/dmFrontAssetFilter.php

    r21423 r21489  
    1414        'lib.form', 
    1515        'lib.hotkeys', 
     16        'lib.markitup', 
     17        'lib.markitupSet', 
    1618        'core.config', 
    1719        'core.plugins', 
     
    2022        'core.editCtrl', 
    2123        'core.form', 
     24        'core.tabForm', 
    2225        'core.toolBar', 
    2326        'core.pageBar', 
     
    5861      $cssArray = array( 
    5962        'lib.ui', 
     63        'lib.markitup', 
     64        'lib.markitupSet', 
    6065        'core.util', 
    6166        'core.editMode', 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/base/dmWidgetBaseForm.php

    r21423 r21489  
    44{ 
    55  protected 
    6     $widget; 
     6    $dmWidget; 
    77 
    88  protected 
     
    1616   * @param string $CSRFSecret  A CSRF secret (false to disable CSRF protection, null to use the global CSRF secret) 
    1717   */ 
    18   public function __construct($widget = array(), $options = array(), $CSRFSecret = null) 
     18  public function __construct($widget, $options = array(), $CSRFSecret = null) 
    1919  { 
    2020    if (!$widget instanceof DmWidget) 
     
    6969  protected function renderActions() 
    7070  { 
     71    $i18n = dm::getI18n(); 
     72     
    7173    return sprintf( 
    7274      '<div class="actions"> 
    73         <div class="actions_part clearfix"> 
    74           %s%s 
    75         </div> 
    76         <div class="actions_part clearfix"> 
    77           %s%s 
    78         </div> 
     75        <div class="actions_part clearfix">%s%s</div> 
     76        <div class="actions_part clearfix">%s%s</div> 
    7977      </div>', 
    80       sprintf('<a class="dm cancel close_dialog button fleft">%s</a>', dm::getI18n()->__('Cancel')), 
    81       sprintf('<input type="submit" class="submit try blue fright" name="try" value="%s" />', dm::getI18n()->__('Try')), 
    82       sprintf('<a class="dm delete button red fleft" title="%s">%s</a>', dm::getI18n()->__('Delete this widget'), dm::getI18n()->__('Delete')), 
    83       sprintf('<input type="submit" class="submit and_save green fright" name="and_save" value="%s" />', dm::getI18n()->__('Save and close')) 
     78      sprintf('<a class="dm cancel close_dialog button fleft">%s</a>', $i18n->__('Cancel')), 
     79      sprintf('<input type="submit" class="submit try blue fright" name="try" value="%s" />', $i18n->__('Try')), 
     80      sprintf('<a class="dm delete button red fleft" title="%s">%s</a>', $i18n->__('Delete this widget'), $i18n->__('Delete')), 
     81      sprintf('<input type="submit" class="submit and_save green fright" name="and_save" value="%s" />', $i18n->__('Save and close')) 
    8482    ); 
    8583  } 
     
    125123    return $this->firstDefaults; 
    126124  } 
    127  
    128   /* 
    129    * Static methods 
    130    */ 
     125   
    131126} 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/base/dmWidgetBaseView.php

    r21423 r21489  
    2626    return array_unique($this->requiredVars); 
    2727  } 
     28   
     29  public function isRequiredVar($var) 
     30  { 
     31    return in_array($var, $this->getRequiredVars()); 
     32  } 
    2833 
    2934  public function addRequiredVar($var) 
     
    3742      $this->requiredVars[] = $var; 
    3843    } 
     44  } 
     45   
     46  public function removeRequiredVar($var) 
     47  { 
     48    if (is_array($var)) 
     49    { 
     50      foreach($var as $v) 
     51      { 
     52        $this->removeRequiredVar($v); 
     53      } 
     54    } 
     55    elseif (false !== ($varIndex = array_search($var, $this->requiredVars))) 
     56    { 
     57      unset($this->requiredVars[$varIndex]); 
     58    } 
    3959  } 
    4060 
     
    7090  } 
    7191 
    72   public function getViewVars($vars = array()) 
     92  public function getViewVars(array $vars = array()) 
    7393  { 
    7494    return array_merge( 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/base/project/model/dmWidgetProjectModelView.php

    r21423 r21489  
    1515   * @return array viewVars 
    1616   */ 
    17   public function getViewVars($vars = array()) 
     17  public function getViewVars(array $vars = array()) 
    1818  { 
    1919    $viewVars = parent::getViewVars($vars); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/breadCrumb/dmWidgetNavigationBreadCrumbView.php

    r21423 r21489  
    99  } 
    1010 
    11   public function getViewVars($vars = array()) 
     11  public function getViewVars(array $vars = array()) 
    1212  { 
    1313    $vars = parent::getViewVars($vars); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/list/dmWidgetListView.php

    r21423 r21489  
    2626   * @return array viewVars 
    2727   */ 
    28   public function getViewVars($vars = array()) 
     28  public function getViewVars(array $vars = array()) 
    2929  { 
    3030    $viewVars = parent::getViewVars($vars); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/media/dmWidgetContentMediaForm.php

    r21423 r21489  
    8989 
    9090    $this->validatorSchema->setPostValidator( 
    91       new sfValidatorCallback(array('callback' => array($this, 'checkSource'))) 
     91      new sfValidatorCallback(array('callback' => array($this, 'checkMediaSource'))) 
    9292    ); 
    9393 
     
    9595  } 
    9696 
    97   public function checkSource($validator, $values) 
     97  public function checkMediaSource($validator, $values) 
    9898  { 
    9999    if (!$values['mediaId'] && !$values['file']) 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/media/dmWidgetContentMediaView.php

    r21423 r21489  
    33class dmWidgetContentMediaView extends dmWidgetPluginView 
    44{ 
     5   
    56  public function configure() 
    67  { 
     
    1011  } 
    1112 
    12   public function getViewVars($vars = array()) 
     13  public function getViewVars(array $vars = array()) 
    1314  { 
    1415    $vars = parent::getViewVars($vars); 
    1516     
    16     $media = dmDb::query('DmMedia m, m.Folder f') 
    17     ->where('m.id = ?', $vars['mediaId']) 
    18     ->fetchOne(); 
    19  
    20     $mediaTag = dmMediaTag::build($media); 
    21  
    22     if (!empty($vars['width']) || !empty($vars['height'])) 
    23     { 
    24       $mediaTag->size(dmArray::get($vars, 'width'), dmArray::get($vars, 'height')); 
    25     } 
    26  
    27     $mediaTag->method($vars['method']); 
    28  
    29     if ($vars['method'] === 'fit') 
    30     { 
    31       $mediaTag->background($vars['background']); 
    32     } 
    33  
    34     $vars['media'] = $mediaTag; 
     17    if (!empty($vars['mediaId']) || $this->isRequiredVar('mediaId')) 
     18    { 
     19      $media = dmMediaTag::build(dmDb::table('DmMedia')->findOneByIdWithFolder($vars['mediaId'])); 
     20   
     21      if (!empty($vars['width']) || !empty($vars['height'])) 
     22      { 
     23        $media->size(dmArray::get($vars, 'width'), dmArray::get($vars, 'height')); 
     24      } 
     25   
     26      $media->method($vars['method']); 
     27   
     28      if ($vars['method'] === 'fit') 
     29      { 
     30        $media->background($vars['background']); 
     31      } 
     32    } 
     33    else 
     34    { 
     35      $media = null; 
     36    } 
     37   
     38    $vars['media'] = $media; 
    3539 
    3640    return $vars; 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/search/dmWidgetAdvancedSearchFormView.php

    r21446 r21489  
    99  } 
    1010 
    11   public function getViewVars($vars = array()) 
     11  public function getViewVars(array $vars = array()) 
    1212  { 
    1313    $vars = parent::getViewVars($vars); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/search/dmWidgetAdvancedSearchResultsView.php

    r21446 r21489  
    99  } 
    1010 
    11   public function getViewVars($vars = array()) 
     11  public function getViewVars(array $vars = array()) 
    1212  { 
    1313    $vars = parent::getViewVars($vars); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/text/dmWidgetContentTextForm.php

    r21423 r21489  
    11<?php 
    22 
    3 class dmWidgetContentTextForm extends dmWidgetPluginForm 
     3class dmWidgetContentTextForm extends dmWidgetContentMediaForm 
    44{ 
    55 
     
    1717    $this->validatorSchema['text'] = new sfValidatorString(array('required' => false)); 
    1818     
    19     $mediaForm = new dmWidgetContentMediaForm($this->dmWidget); 
    20     $this->mergeForm($mediaForm); 
     19    $this->widgetSchema['mediaLink'] = new sfWidgetFormInputText(); 
     20    $this->validatorSchema['mediaLink'] = new sfValidatorString(array('required' => false)); 
    2121  } 
    22  
     22   
     23  protected function renderContent($attributes) 
     24  { 
     25    return dmContext::getInstance()->getHelper()->renderPartial('dmWidget', 'forms/dmWidgetContentText', array( 
     26      'form' => $this, 
     27      'baseTabId' => 'dm_widget_text_'.$this->dmWidget->id, 
     28      'hasMedia' => (boolean) $this->getValueOrDefault('mediaId') 
     29    )); 
     30  } 
     31   
     32  /* 
     33   * Disable media source validation 
     34   * because a text widget may have no media 
     35   */ 
     36  public function checkMediaSource($validator, $values) 
     37  { 
     38    return $values; 
     39  } 
    2340} 
  • plugins/diemPlugin/trunk/dmFrontPlugin/lib/dmWidget/text/dmWidgetContentTextView.php

    r21423 r21489  
    11<?php 
    22 
    3 class dmWidgetContentTextView extends dmWidgetPluginView 
     3class dmWidgetContentTextView extends dmWidgetContentMediaView 
    44{ 
    55 
     6  public function configure() 
     7  { 
     8    parent::configure(); 
     9 
     10    $this->removeRequiredVar(array('mediaId', 'method')); 
     11  } 
     12 
     13  public function getViewVars(array $vars = array()) 
     14  { 
     15    $vars = parent::getViewVars($vars); 
     16     
     17    if (!empty($vars['mediaId'])) 
     18    { 
     19      $vars['mediaClass'] = ''; 
     20      $vars['mediaPosition'] = 'top'; 
     21    } 
     22 
     23    $vars['titlePosition'] = 'outside'; 
     24     
     25    $vars['style'] = 'default'; 
     26     
     27    if(!isset($vars['title'])) 
     28    { 
     29      $vars['title'] = null; 
     30    } 
     31     
     32    if(!isset($vars['text'])) 
     33    { 
     34      $vars['text'] = null; 
     35    } 
     36 
     37    return $vars; 
     38  } 
    639} 
  • plugins/diemPlugin/trunk/dmFrontPlugin/modules/dmPage/actions/actions.class.php

    r21423 r21489  
    4141    { 
    4242      $this->js = 
    43         file_get_contents(dmOs::join(sfConfig::get('sf_web_dir'), sfConfig::get('dm_core_asset'), 'lib/jquery-ui/js/ui.tabs.min.js')). 
    4443        dmJsMinifier::transform( 
    45           file_get_contents(dmOs::join(sfConfig::get('sf_web_dir'), sfConfig::get('dm_core_asset'), 'js/dmCoreTabForm.js')). 
    4644          file_get_contents(dmOs::join(sfConfig::get('sf_web_dir'), sfConfig::get('dm_front_asset'), 'js/dmFrontPageEditForm.js')) 
    4745        ) 
  • plugins/diemPlugin/trunk/dmFrontPlugin/modules/dmPage/templates/editSuccess.php

    r21423 r21489  
    66  $form['id']. 
    77 
    8   £('div.dm.dm_page_edit', 
     8  £('div.dm.dm_page_edit.dm_tabbed_form', 
    99 
    1010    £('ul.tabs', 
  • plugins/diemPlugin/trunk/dmFrontPlugin/modules/dmWidget/templates/_dmWidgetContentText.php

    r21423 r21489  
    11<?php 
    22 
    3 return
     3echo £o('div.dm_text.text_'.$style)
    44 
    5 echo £o("div.dm_text.text_".$style); 
     5  if ($title && $titlePosition == 'outside') 
     6  { 
     7    echo £('h2.text_title.outside', $title); 
     8  } 
     9   
     10  echo £o('div.text_content.clearfix'); 
    611 
    7   echo £o('div.text_head.clearfix'); 
    8     echo £('h2.title', $title); 
     12    if ($media && $mediaPosition != 'bottom') 
     13    { 
     14      echo £('div.text_image'.$mediaClass, $media); 
     15    } 
     16   
     17    if ($title && $titlePosition == 'inside') 
     18    { 
     19      echo £('h2.text_title.inside', $title); 
     20    } 
     21   
     22    echo £('text_markdown', dmMarkdown::toHtml($text)); 
     23   
     24    if ($media && $mediaPosition == 'bottom') 
     25    { 
     26      echo £('div.text_image'.$mediaClass, $media); 
     27    } 
     28 
    929  echo £c('div'); 
    1030 
    11   // wrappers de style 
    12   echo '<div class="blob_content_left"><div class="blob_content_right">'; 
    13  
    14   echo £o("div.clearfix.columns_".$blob->getColumns()); // contenu en colonnes 
    15  
    16     switch($blob->getImagePosition()) // choix de la classe de l'image en fonction de la template choisie 
    17     { 
    18       case "img_left":    $img_css = ".fleft.imgleft"; break; 
    19       case "img_right":   $img_css = ".fright.imgright"; break; 
    20       case "img_top":     $img_css = ".imgtop"; break; 
    21       default:            $img_css = false; 
    22     } 
    23     if ($img_css && $blob->getMedia()) // affichage de l'image 
    24     { 
    25       echo £("div.blob_image".$img_css, $blob->getImageWithLink()); 
    26     } 
    27  
    28     if($blob->getNom() && $blob->getTitlePosition() == "title_in") // affichage du titre à l'intérieur 
    29     { 
    30       echo £('h2.blob_nom.title_in', $blob->getNom()); 
    31     } 
    32  
    33     // affichage du texte 
    34     echo £('div.blob_description', aze::markdown($blob->getDescription(), false)); 
    35  
    36     if($blob->getImagePosition() == 'img_bottom') 
    37     { 
    38       echo £("div.blob_image.imgbottom", $blob->getImageWithLink()); 
    39     } 
    40  
    41   echo £c("div"); // fin du contenu en colonnes 
    42  
    43   // fin des wrappers de style 
    44   echo '</div></div><div class="blob_foot_left"><div class="blob_foot_right"></div></div>'; 
    45  
    46 echo £c("div"); // fin de blob_style 
     31echo £c('div'); 
  • plugins/diemPlugin/trunk/dmFrontPlugin/modules/dmWidget/templates/forms/dmWidgetContentMedia.php

    r21423 r21489  
    11<?php 
    22 
    3 echo $form->renderGlobalErrors(); 
     3//echo $form->renderGlobalErrors(); 
    44 
    55echo £o('li.toggle_group'); 
    66 
    7 echo $form['mediaId']
     7echo $form['mediaId']->render(array('class' => 'dm_media_id'))
    88 
    99if ($hasMedia) 
  • plugins/diemPlugin/trunk/dmFrontPlugin/web/css/form.css

    r21423 r21489  
    6161  margin: 5px; 
    6262} 
     63 
     64.dm_tabbed_form.ui-tabs { 
     65  border: 0; 
     66} 
     67 
     68.dm_tabbed_form .ui-tabs-panel { 
     69  padding: 5px 0 0 0; 
     70} 
     71 
     72.dm_form textarea.markItUpEditor { 
     73  width: 97%; 
     74} 
  • plugins/diemPlugin/trunk/dmFrontPlugin/web/css/pageEditForm.css

    r21423 r21489  
    1 .dm_page_edit.ui-tabs .ui-tabs-panel { 
    2   padding: 5px 0; 
    3 } 
    4   
    51.dm_page_edit_wrap .actions { 
    62  margin-top: 10px; 
  • plugins/diemPlugin/trunk/dmFrontPlugin/web/js/dmFrontForm.js

    r21423 r21489  
    99    this.form = $('form:first', this.element); 
    1010     
    11     this.linkDroppable(); 
     11    this.markitup(); 
     12    this.linkDroppable(); 
     13    this.hotKeys(); 
     14  }, 
     15   
     16  hotKeys: function() 
     17  { 
     18    var self = this; 
    1219     
    13     this.element.bindKey('Ctrl+s', function() { 
    14       self.form.submit(); 
    15       return false; 
    16     }); 
     20    self.element.bindKey('Ctrl+s', function() { 
     21      self.form.submit(); 
     22      return false; 
     23    }); 
     24  }, 
     25   
     26  markitup: function() 
     27  { 
     28    var self = this; 
     29     
     30    $('textarea.dm_markdown', self.form).each(function() 
     31    { 
     32      var $editor = $(this); 
     33       
     34      $editor.markItUp(dmMarkitupMarkdown); 
     35       
     36      $editor.resizable({handles: 's'}); 
     37    }); 
    1738  } 
    1839   
  • plugins/diemPlugin/trunk/dmFrontPlugin/web/js/page/dmWidget.js

    r21423 r21489  
    1212  openEditDialog: function() 
    1313  { 
    14     var widget = this
     14    var widget = this, activeTab = null
    1515     
    1616    var $dialog = $.dm.ctrl.ajaxDialog({ 
     
    4747          $form[formClass](widget); 
    4848        } 
     49        /* 
     50         * Restore active tab 
     51         */ 
     52        if(activeTab) 
     53        { 
     54          $form.find('div.dm_tabbed_form').tabs('select', activeTab); 
     55        } 
    4956        $form.find('form').dmAjaxForm({ 
    5057          beforeSubmit: function(data) { 
    5158            $dialog.block(); 
    5259            widget.element.block(); 
     60            if ($tabbedFormActiveTab = $form.find('ul.ui-tabs-nav > li.ui-tabs-selected:first').orNot()) 
     61            { 
     62              activeTab = $tabbedFormActiveTab.find('>a').attr('href'); 
     63            } 
    5364          }, 
    5465          success:  function(data) { 
  • plugins/diemPlugin/trunk/dmFrontPlugin/web/js/page/dmWidgetForms.js

    r21423 r21489  
    1515      tolerance:    'touch', 
    1616      drop:         function(event, ui) { 
    17         $('input#dm_widget_content_media_form_mediaId', self).val(ui.draggable.attr('id').replace(/dmm/, '')); 
     17        $('input.dm_media_id', self).val(ui.draggable.attr('id').replace(/dmm/, '')); 
    1818        $form.submit(); 
    1919      } 
     
    2828    }).trigger('change'); 
    2929  }, 
    30    
    31   dmWidgetContentLinkForm: function(widget) 
    32   { 
     30   
     31  dmWidgetContentTextForm: function(widget) 
     32  { 
     33    var self = this, $form = self.find('form:first'), $tabs = $form.find('div.dm_tabbed_form').dmCoreTabForm({}); 
    3334     
    34   } 
     35    self.dmWidgetContentMediaForm(widget); 
     36  }, 
     37   
     38  dmWidgetContentLinkForm: function(widget) 
     39  { 
     40     
     41  } 
    3542   
    3643});