@phoenix-plugin-registry/swmitra.html-designer
Version:
NOW WITH RESPONSIVE DESIGN TOOLS (BETA)! Design and customize web ui with HTML and CSS. Now with taggable Design snippet/bookmark support.
143 lines (125 loc) • 6.12 kB
JavaScript
/**
* @author Swagatam Mitra
*/
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
/*global define, document, console, brackets, $, Mustache */
define(function (require, exports, module) {
"use strict";
var FileSystem = brackets.getModule("filesystem/FileSystem");
var AttributeTemplate = require("text!attribute/html/attributeTemplate.html");
var attributes = JSON.parse(require("text!attribute/HTMLAttributeMetaData.json"));
var commonAttrs = attributes.html.common;
function _buildEditorUI(selectedElement){
var tagName = selectedElement.tagName;
$("#attribute-editor > .attributeContainer").remove();
_buildCommonAttrEntry(selectedElement);
var specificAttrs = attributes.html[tagName];
if(tagName === 'INPUT'){
_buildSpecificAttrEntry(selectedElement,specificAttrs.attrs);
var type = $(selectedElement).attr('type');
if(type){
type = specificAttrs.filter[type];
if(type){
_buildSpecificAttrEntry(selectedElement,type);
}
}
} else {
_buildSpecificAttrEntry(selectedElement,specificAttrs);
}
}
function _buildSpecificAttrEntry(selectedElement, specificAttrs){
for( var i in specificAttrs){
_buildUIFragment(selectedElement,specificAttrs[i]);
}
}
function _buildCommonAttrEntry(selectedElement){
for( var i in commonAttrs){
_buildUIFragment(selectedElement,commonAttrs[i]);
}
}
function _buildUIFragment(selectedElement, attr){
switch (attr.type){
case 'text': _buildTextEntryFragment(selectedElement,attr); break;
case 'number': _buildNumberEntryFragment(selectedElement,attr); break;
case 'path': _buildPathEntryFragment(selectedElement,attr); break;
case 'list': _buildListEntryFragment(selectedElement,attr); break;
case 'select' : _buildSelectEntryFragment(selectedElement,attr);break;
case 'toggle' : _buildToggleFragment(selectedElement,attr);break;
}
}
function _buildTextEntryFragment(selectedElement, attr){
var entry = $(AttributeTemplate).appendTo("#attribute-editor");
entry.find(".attr-key").html(attr.key);
entry.find(".attr-value").val(attr.key === 'value' ? $(selectedElement).val() : $(selectedElement).attr(attr.key));
entry.find(".attr-value").on('change',function(){
if(attr.key === 'value'){
$(selectedElement).val(entry.find(".attr-value").val());
} else {
var oldval = $(selectedElement).attr(attr.key);
$(selectedElement).attr(attr.key,entry.find(".attr-value").val() || '');
if(oldval && entry.find(".attr-value").val() && attr.key === "id"){
$("#html-design-editor").trigger("id-attribute-update",[oldval,entry.find(".attr-value").val()]);
}
}
$("#html-design-editor").trigger("refresh.element.selection");
$("#html-design-editor").trigger('html.element.updated');
});
return entry;
}
function _buildToggleFragment(selectedElement, attr){
var entry = $(AttributeTemplate).appendTo("#attribute-editor");
entry.find(".attr-key").html(attr.key);
entry.find(".attr-value").hide();
entry.find(".attr-value-select").hide();
entry.find(".attr-toggle").show();
entry.find(".attr-toggle-input").prop('checked',/*$(selectedElement).prop(attr.key)*/selectedElement.hasAttribute(attr.key));
entry.find(".attr-toggle-input").on('change',function(){
if(entry.find(".attr-toggle-input").prop('checked')){
selectedElement.setAttributeNode(document.createAttribute(attr.key));
} else {
selectedElement.removeAttribute(attr.key);
}
//$(selectedElement).prop(attr.key,entry.find(".attr-toggle-input").prop('checked'));
$("#html-design-editor").trigger("refresh.element.selection");
$("#html-design-editor").trigger('html.element.updated');
});
}
function _buildNumberEntryFragment(selectedElement, attr){
var entry = _buildTextEntryFragment(selectedElement,attr);
entry.find(".attr-value").attr('type','number');
}
function _buildSelectEntryFragment(selectedElement, attr){
var entry = $(AttributeTemplate).appendTo("#attribute-editor");
entry.find(".attr-key").html(attr.key);
entry.find(".attr-value").hide();
for(var i in attr.options){
var option = document.createElement('OPTION');
$(option).val(attr.options[i]).html(attr.options[i]).appendTo(entry.find(".attr-value-select"));
}
entry.find(".attr-value-select").show();
entry.find(".attr-value-select").val($(selectedElement).attr(attr.key));
entry.find(".attr-value-select").on('change',function(){
$(selectedElement).attr(attr.key,entry.find(".attr-value-select").val());
$("#html-design-editor").trigger("select.element",[selectedElement]);
$("#html-design-editor").trigger('html.element.updated');
});
}
function _buildPathEntryFragment(selectedElement, attr){
var entry = _buildTextEntryFragment(selectedElement,attr);
entry.find(".path-browse").show();
entry.find(".path-browse").on('click',function(){
FileSystem.showOpenDialog(false, false, "Please Select file", '', null,
function (err, files) {
if (!err) {
entry.find(".attr-value").val(files[0]);
entry.find(".attr-value").trigger('change');
} else {
// result.reject();
}
});
});
}
function _buildListEntryFragment(selectedElement, attr){
}
exports.buildUI = _buildEditorUI;
});