浏览代码

HUE-147. Convert FileBrowser private filters

Marcus McLaughlin 15 年之前
父节点
当前提交
2e46a69e71

+ 7 - 22
apps/filebrowser/src/filebrowser/static/js/Source/FileBrowser/CCS.FileEditor.js

@@ -46,19 +46,13 @@ CCS.FileEditor = new Class({
 
 	initialize: function (path, options) {
 		this.parent(path || '/filebrowser/', options);
-		this.jframe.addFilters({
-			'fe-resizer': function (container) {
-				this.textarea = $(this.jframe).getElement('textarea');
-				if (!this.textarea) return;
-				this.divResize = $(this.jframe).getElement('.fe-divResize');
-				this.resizeTextarea(this.contentSize.x, this.contentSize.y);
-			}.bind(this),
-			'fe-posteditor': function (container) {
-				this.textarea = $(this.jframe).getElement('textarea');
-				if (!this.textarea) return;
-				var postEditor = new CCS.PostEditor.Simple(this.textarea);
-			}.bind(this)
-		});
+                this.jframe.addBehaviors({
+                        'FE-PostEditor': function(element, methods) {
+                                var textarea = element.getElement('textarea');
+                                if(!textarea) return;
+                                var postEditor = new CCS.PostEditor.Simple(textarea); 
+                        }
+                });
 		this.jframe.addRenderers({
 			'saveAsPrompt_popup': function (content) {
 				var saveAs = content.elements.filter('.saveAsPrompt_popup')[0];
@@ -111,18 +105,9 @@ CCS.FileEditor = new Class({
 		});
 		this.addEvents({
 			load: function(){
-				this.jframe.addEvent('resize', this.resizeTextarea.bind(this));
 				$(this.jframe).setStyle('overflow', 'hidden');
 			}.bind(this)
 		});
 		
-	},
-
-	resizeTextarea: function (w, h) {
-		this.textarea.setStyles({
-			width: w - 20,
-			height: h
-		});
 	}
-
 });

+ 3 - 1
apps/filebrowser/src/filebrowser/templates/edit.mako

@@ -44,7 +44,9 @@
     ${edit.render_field(form["path"], hidden=True, notitle=True)}
     ${edit.render_field(form["encoding"], hidden=True, notitle=True)}
     <h2 class="ccs-hidden">${form["contents"].label_tag() | n}</h2>
-    <div class="fe-divResize" data-filters="SizeTo">${unicode(form["contents"]) | n}</div>
+    <div class="fe-divResize" data-filters="SizeTo, FE-PostEditor">${edit.render_field(form["contents"], tag="textarea", notitle=True, attrs=dict(
+      data_filters="SizeTo",
+      data_size_to_width="-20")) | n}</div>
     <input class="ccs-hidden" type="submit" name="save" value="saveAs">
     <input class="ccs-hidden" type="submit" name="save" value="save">
 </form>

+ 81 - 11
apps/filebrowser/src/filebrowser/templates/editor_components.mako

@@ -13,20 +13,90 @@
 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
-<%def name="render_field(field, hidden=False, notitle=False)">
+<%!
+  from desktop.lib.django_util import extract_field_data
+%>
+
+<%def name="render_field(
+  field, 
+  render_default=False, 
+  data_filters=None,
+  hidden=False, 
+  notitle=False, 
+  tag='input', 
+  klass=None, 
+  attrs=None, 
+  value=None, 
+  help=False, 
+  help_attrs=None, 
+  dd_attrs=None, 
+  dt_attrs=None, 
+  title_klass=None,
+  button_text=False
+  )">
 <%
-  cls = ""
+  if value is None:
+    value = extract_field_data(field)
+
+  def make_attr_str(attributes):
+    if attributes is None:
+      attributes = {}
+    ret_str = ""
+    for key, value in attributes.iteritems():
+      if key == "klass":
+        key = "class"
+      ret_str += "%s='%s'" % (key.replace("_", "-"), unicode(value))
+    return ret_str
+
+  if not attrs:
+    attrs = {}
+  if not render_default:
+    attrs.setdefault('type', 'text')
+    
+  if data_filters:
+    attrs.data_filters = data_filters
+  
+  classes = []
+  if klass:
+    classes.append(klass)
   if hidden: 
-    cls = "ccs-hidden"
-  titlecls = ""
+    classes.append("ccs-hidden")
+  cls = ' '.join(classes)
+
+  title_classes = []
+  if title_klass:
+    title_classes.append(title_klass)
   if notitle or hidden:
-    titlecls = "ccs-hidden"
+    title_classes.append("ccs-hidden")
+  titlecls = ' '.join(title_classes)
 %>
-  <dt class="${titlecls}">${field.label_tag() | n}</dt>
-  <dd class="${cls}">${unicode(field) | n}</dd>
-  % if len(field.errors):
-    <dd class="beeswax_error">
-       ${unicode(field.errors) | n}
-     </dd>
+  % if field.is_hidden:
+    ${unicode(field) | n}
+  % else:
+    <dt class="${titlecls}" ${make_attr_str(dt_attrs) | n}>${field.label_tag() | n}</dt>
+    <dd class="${cls}" ${make_attr_str(dd_attrs) | n}>
+      % if render_default:
+        ${unicode(field) | n}
+      % else:
+        % if tag == 'textarea':
+          <textarea name="${field.html_name | n}" ${make_attr_str(attrs) | n} />${extract_field_data(field) or ''}</textarea>
+        % elif tag == 'button':
+          <button name="${field.html_name | n}" ${make_attr_str(attrs) | n} value="${value}"/>${button_text or field.name or ''}</button>
+        % elif tag == 'checkbox':
+          <input type="checkbox" name="${field.html_name | n}" ${make_attr_str(attrs) | n} ${value and "CHECKED" or ""}/>${button_text or field.name or ''}</input>
+        % else:
+          <${tag} name="${field.html_name | n}" value="${extract_field_data(field) or ''}" ${make_attr_str(attrs) | n} />
+        % endif
+      % endif
+      % if help:
+        <p class="ccs-inline" data-filters="HelpTip" ${make_attr_str(help_attrs) | n}>${help}</p>
+      % endif
+    </dd>
+    % if len(field.errors):
+      <dd class="beeswax_error ccs-error">
+         ${unicode(field.errors) | n}
+       </dd>
+    % endif
   % endif
 </%def>
+

+ 2 - 2
desktop/core/static/js/Source/BehaviorFilters/Behavior.SizeTo.js

@@ -44,8 +44,8 @@ Behavior.addGlobalFilters({
 			return;
 		}
 		resize = function(x, y){
-			if (sizeTo.x) element.setStyle('width', x + sizeTo.x.toInt());
-			if (sizeTo.y) element.setStyle('height', y + sizeTo.y.toInt());
+			element.setStyle('width', x + (sizeTo.x ? sizeTo.x.toInt() : 0));
+			element.setStyle('height', y + (sizeTo.y ? sizeTo.y.toInt() : 0));
 		};
 		size = methods.getContainerSize();
 		resize(size.x, size.y);