|
|
semantic.playground = {};
window.ui = {};
$.api.settings.api = { 'getSpecification': 'spec/{$type}.json' };
$.fn.dropdown.settings.animation.hide = 'none';
$.fn.dropdown.debug = false; $.fn.checkbox.debug = false; $.fn.api.debug = false; $.fn.popup.debug = false;
// ready event
semantic.playground.ready = function() {
// selector cache
var $uiMenu = $('.ui.menu'), $elements = $('.element.menu'), $elementChoice = $elements.find('.selection.dropdown'),
$variations = $('.variation.menu'), $variationForm = $variations.find('.form'), $variationChoice = $variations.find('.selection'),
$types = $('.type.menu'), $typeForm = $types.find('.form'), $typeChoice = $types.find('.selection'),
$preview = $('.preview.segment'), $text = $('.text'),
$page = $('.page.column'),
$view = $('.view.buttons .button'), $previewView = $view.filter('.preview'), $htmlView = $view.filter('.html'),
$download = $('.download.button'),
$addElement = $('.add.button'),
template = {},
// alias
handler = {
initialize: function() {
template.select = handler.template.compile('select'), template.checkbox = handler.template.compile('checkbox'),
handler.interface.get('button'); handler.attachEvents(); },
attachEvents: function() { $elementChoice .dropdown({ action : 'form', onChange : function(type) { $.proxy(handler.interface.setExclusive, this)(); handler.interface.get(type); } }) ; $addElement .on('click', handler.preview.add) ; $previewView .on('click', handler.view.preview) ; $htmlView .on('click', handler.view.html) ; },
preview: {
add: function() { handler.item.insert( $preview.html() ); },
get: function() { console.log('Making preview'); var koan =$typeForm.find('.dropdown:not(.default) input').val() || false, classNames, $element, dummyText = ['Submit', 'Add', 'Create'] ; classNames = handler.interface.getValues($variationForm); if(koan) { $element = $ .zc(koan) .addClass(classNames.join(' ')) ; handler.preview.addText($element); $preview .empty() .append($element) ; }
// add class names
},
addText: function($element) { var $parts = $element.children() ; if($parts.size() === 0) { $element.text('Example'); } else { $parts .each(function() { handler.preview.preview.addText($(this)); }) ; } },
update: function() { $preview.html( handler.preview.get() ); }
},
types: { create: function(type) { var html = '', ui = window.ui[type] || false, format = (ui) ? ui['Types'] : {} ; handler.interface.addForm($typeForm, format); $typeForm .find('.dropdown') .dropdown('setting', 'onChange', handler.interface.setExclusive) ; }, toggle: function() {
} },
variations: {
create: function(type) { var html = '', ui = window.ui[type] || false, format = (ui) ? ui['Variations'] : {} ; handler.interface.addForm($variationForm, format); },
toggle: function() {
}
},
interface: { addForm: function($element, list) { var html = '' ; $.each(list, function(name, variation) { // complex variation
if( $.isPlainObject(variation) && variation.selector !== undefined) {
} // select box
else if( $.isArray(variation) || $.isPlainObject(variation) ) { html += template.select({ name : name, values : variation }); } // checkbox
else if( typeof variation == 'string') { html += template.checkbox({ value: variation }); } }); $(html) .appendTo($element) ; $element .find('.dropdown') .dropdown({ action : 'form', onChange : handler.preview.update }) .end() .find('.checkbox') .checkbox({ onChange: handler.preview.update }) ; return $element; }, getValues: function($form) { var $inputs = $form.find('input'), classNames = [] ; $inputs .each(function() { var type = $(this).attr('type'), value = $(this).val() ; if( type == 'hidden' && value != 'none') { classNames.push(value); } else if( type == 'checkbox' && $(this).is(':checked') ) { classNames.push(value); } }) ; console.log(classNames); return classNames; }, setExclusive: function() { $(this) .removeClass('default') .closest('.item').find('.dropdown') .not( $(this) ) .addClass('default') .find('.text') .html('---') .end() .find('input') .val('') ; }, clear: function() { $typeForm.empty(); $variationForm.empty(); }, update: function(type) { handler.types.create(type); handler.variations.create(type); }, get: function(type) { if(type !== undefined) { if(window.ui[type] === undefined) { $.api({ action: 'getSpecification', urlData: { type: type }, success: function(json) { window.ui[type] = json; handler.interface.update(type); }, failure: function() { window.ui[type] = {}; handler.interface.clear(); } }); } else { handler.interface.update(type); } } } },
item: { update: function(type) { }, change: function(type) { }, highlight: function() {
}, insert: function(html) { if( $page.hasClass('default') ) { $page .removeClass('default') .empty() ; } $(html) .appendTo($page) ; }, remove: function() {
}
},
template: { compile: function(name) { var template = Handlebars.compile($('script.'+name).html()); return ($.isFunction(template)) ? template : false ; } },
view: { preview: function() { $(this) .addClass('active') .siblings() .removeClass('active') ; }, html: function() { $(this) .addClass('active') .siblings() .removeClass('active') ; } },
components: {
add: function() {
}, remove: function() {
} },
activate: function(value) { if(!$(this).hasClass('dropdown')) { $(this) .addClass('active') .closest('.ui.playground') .find('.item') .not($(this)) .removeClass('active') ; } }
} ;
handler.initialize();
};
// attach ready event
$(document) .ready(semantic.playground.ready) ;
|