ExamplePanel/ExamplePage: add mode/selected option ('source' or 'live')

This commit is contained in:
rolux 2012-07-05 21:38:02 +02:00
parent d70b996472
commit 01717f3727
2 changed files with 47 additions and 30 deletions

View file

@ -5,6 +5,8 @@ Ox.ExamplePage <f> Example Page
options <o> Options options <o> Options
self <o> Shared private variable self <o> Shared private variable
([options[, self]]) -> <o:Ox.SplitPanel> Example Page ([options[, self]]) -> <o:Ox.SplitPanel> Example Page
change <!> Change event
close <!> Close event
@*/ @*/
Ox.ExamplePage = function(options, self) { Ox.ExamplePage = function(options, self) {
@ -20,7 +22,12 @@ Ox.ExamplePage = function(options, self) {
selected: 'source', selected: 'source',
title: '' title: ''
}) })
.options(options || {}); .options(options || {})
.update({
selected: function() {
self.$tabs.options({value: self.options.selected});
}
});
self.$toolbar = Ox.Bar({size: 24}); self.$toolbar = Ox.Bar({size: 24});
@ -116,37 +123,21 @@ Ox.ExamplePage = function(options, self) {
self.$reloadButton.options({disabled: disabled}); self.$reloadButton.options({disabled: disabled});
self.$openButton.options({disabled: disabled}); self.$openButton.options({disabled: disabled});
self.$content.animate({ self.$content.animate({
marginLeft: data.value == 'source' marginLeft: self.options.selected == 'source'
? 0 : -self.options.width + 'px' ? 0 : -self.options.width + 'px'
}, 250, function() { }, 250, function() {
if (data.value == 'live' && !self.$frame.attr('src')) { if (
self.options.selected == 'live'
&& !self.$frame.attr('src')
) {
self.$frame.attr({src: self.options.html}); self.$frame.attr({src: self.options.html});
} }
}); });
that.triggerEvent('change', data);
} }
}) })
.appendTo(self.$toolbar); .appendTo(self.$toolbar);
/*
self.$referencesMenu = Ox.MenuButton({
items: self.options.references.map(function(reference) {
return {id: reference, title: reference};
}),
//title: 'Documentation',
//width: 128
title: 'select',
tooltip: 'References',
type: 'image'
})
.css({float: 'right', margin: '4px 2px 4px 2px'})
.bindEvent({
click: function(data) {
that.triggerEvent('doc', {id: data.id});
}
})
.appendTo(self.$toolbar);
*/
self.$viewer = Ox.SourceViewer({ self.$viewer = Ox.SourceViewer({
file: self.options.js, file: self.options.js,
replaceCode: self.options.replaceCode, replaceCode: self.options.replaceCode,
@ -173,7 +164,9 @@ Ox.ExamplePage = function(options, self) {
self.$content = Ox.Element() self.$content = Ox.Element()
.css({ .css({
position: 'absolute', position: 'absolute',
width: self.options.width * 2 + 'px' width: self.options.width * 2 + 'px',
marginLeft: self.options.selected == 'source'
? 0 : -self.options.width + 'px'
}) })
.append(self.$viewer) .append(self.$viewer)
.append(self.$frame); .append(self.$frame);
@ -202,7 +195,12 @@ Ox.ExamplePage = function(options, self) {
} }
}); });
setTimeout(setSize, 100); setTimeout(function() {
setSize();
if (self.options.selected == 'live') {
self.$frame.attr({src: self.options.html});
}
}, 100);
function setSize() { function setSize() {
self.options.width = that.width(); self.options.width = that.width();

View file

@ -5,8 +5,10 @@ Ox.ExamplePanel <f> Example Panel
options <o> Options options <o> Options
self <o> Shared private variable self <o> Shared private variable
([options[, self]]) -> <o:Ox.SplitPanel> Example Panel ([options[, self]]) -> <o:Ox.SplitPanel> Example Panel
load <!> load change <!> Change event
select <!> select value <s> 'source' or 'live'
load <!> Load event
select <!> Select event
id <s> selected example id <s> selected example
@*/ @*/
@ -17,6 +19,7 @@ Ox.ExamplePanel = function(options, self) {
.defaults({ .defaults({
element: '', element: '',
examples: [], examples: [],
mode: 'source',
path: '', path: '',
references: null, references: null,
replaceCode: [], replaceCode: [],
@ -26,7 +29,15 @@ Ox.ExamplePanel = function(options, self) {
}) })
.options(options || {}) .options(options || {})
.update({ .update({
mode: function() {
Ox.print('mode handler', self.options.selected)
if (self.options.selected) {
self.$page.options({selected: self.options.mode});
}
},
selected: function() { selected: function() {
Ox.print('selected handler');
self.options.mode = 'source';
selectItem(self.options.selected); selectItem(self.options.selected);
} }
}); });
@ -74,6 +85,7 @@ Ox.ExamplePanel = function(options, self) {
.bindEvent({ .bindEvent({
select: function(data) { select: function(data) {
if (!data.ids[0] || !Ox.endsWith(data.ids[0], '/')) { if (!data.ids[0] || !Ox.endsWith(data.ids[0], '/')) {
self.options.mode = 'source';
selectItem( selectItem(
data.ids[0] ? data.ids[0].split('/').pop() : '' data.ids[0] ? data.ids[0].split('/').pop() : ''
); );
@ -82,7 +94,7 @@ Ox.ExamplePanel = function(options, self) {
}); });
self.$panel.replaceElement(0, self.$list); self.$panel.replaceElement(0, self.$list);
selectItem(self.options.selected); selectItem(self.options.selected);
that.triggerEvent('load', {}); that.triggerEvent('load', {items: self.items});
}); });
function getItemByName(name) { function getItemByName(name) {
@ -127,7 +139,8 @@ Ox.ExamplePanel = function(options, self) {
} }
function selectItem(id) { function selectItem(id) {
var item = id ? getItemByName(id) : null; var item = id ? getItemByName(id) : null,
selected = self.options.selected;
if (item) { if (item) {
self.options.selected = id; self.options.selected = id;
self.$list.options({selected: [item.section + '/' + id]}); self.$list.options({selected: [item.section + '/' + id]});
@ -138,10 +151,14 @@ Ox.ExamplePanel = function(options, self) {
references: item.references, references: item.references,
replaceCode: self.options.replaceCode, replaceCode: self.options.replaceCode,
replaceComment: self.options.replaceComment, replaceComment: self.options.replaceComment,
selected: self.options.mode,
title: item.title, title: item.title,
width: window.innerWidth - self.options.size width: window.innerWidth - self.options.size
}) })
.bindEvent({ .bindEvent({
change: function(data) {
that.triggerEvent('change', data);
},
close: function() { close: function() {
selectItem(); selectItem();
} }
@ -152,8 +169,10 @@ Ox.ExamplePanel = function(options, self) {
self.$list.options({selected: []}); self.$list.options({selected: []});
self.$page.empty().append(self.options.element); self.$page.empty().append(self.options.element);
} }
if (self.options.selected != selected) {
that.triggerEvent('select', {id: self.options.selected}); that.triggerEvent('select', {id: self.options.selected});
} }
}
function sortById(a, b) { function sortById(a, b) {
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0; return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;