'use strict'; /*@ Ox.InsertHTMLDialog Insert HTML Dialog ([options[, self]]) -> Insert HTML Dialog options Options self Shared private variable @*/ Ox.InsertHTMLDialog = function(options, self) { var that; self = self || {}; self.options = Ox.extend({ callback: void 0, end: 0, selection: '', start: 0 }, options || {}); self.type = self.options.selection.indexOf('\n') > -1 ? 'textarea' : 'input'; self.items = [ {id: 'img', title: 'Image'}, {id: 'a', title: 'Link'}, {id: 'li', title: 'List'}, {}, {id: 'blockquote', title: 'Blockquote'}, {id: 'h1', title: 'Headline'}, {id: 'p', title: 'Paragraph'}, {id: 'div', title: 'Right-to-Left'}, {}, {id: 'b', title: 'Bold'}, {id: 'i', title: 'Italic'}, {id: 'code', title: 'Monospace'}, {id: 's', title: 'Strike'}, {id: 'sub', title: 'Subscript'}, {id: 'sup', title: 'Superscript'}, {id: 'u', title: 'Underline'}, {}, {id: 'br', title: 'Linebreak'} ].map(function(item, i) { var form, format; if (item.id == 'img') { form = [ Ox.Input({ id: 'url', label: 'URL', labelWidth: 128, width: 384 }) ]; format = function(values) { return ''; }; } else if (item.id == 'a') { form = [ Ox.Input({ height: 104, id: 'text', label: 'Text', labelWidth: 128, type: self.type, width: 384, value: self.options.selection }) .css({background: 'transparent'}), Ox.Input({ id: 'url', label: 'URL', labelWidth: 128, width: 384 }) ]; format = function(values) { return '' + values.text + ''; }; } else if (item.id == 'li') { form = [ Ox.Select({ id: 'style', items: [ {id: 'ul', title: 'Bullets'}, {id: 'ol', title: 'Numbers'} ], label: 'Style', labelWidth: 128, width: 384 }), Ox.ArrayInput({ id: 'items', label: 'Items', max: 10, value: self.options.selection.split('\n'), width: 384 }) ]; format = function(values) { return '<' + values.style + '>\n' + values.items.map(function(value) { return '
  • ' + value + '
  • \n'; }).join('') + ''; }; } else if (['p', 'blockquote', 'div'].indexOf(item.id) > -1) { form = [ Ox.Input({ height: 128, id: 'text', label: 'Text', labelWidth: 128, type: 'textarea', value: self.options.selection, width: 384 }) .css({background: 'transparent'}) ]; format = function(values) { return '<' + item.id + ( item.id == 'div' ? ' style="direction: rtl"' : '' ) + '>' + values.text + ''; }; } else if (['h1', 'b', 'i', 'code', 's', 'sub', 'sup', 'u'].indexOf(item.id) > -1) { //Ox.print(self.options.selection.indexOf('\n'), '?????????') form = [ Ox.Input({ height: 128, id: 'text', label: 'Text', labelWidth: 128, type: self.type, value: self.options.selection, width: 384 }) .css({background: 'transparent'}) ]; format = function(values) { return '<' + item.id + '>' + values.text + ''; }; } else if (item.id == 'br') { form = []; format = function() { return '
    '; }; } return item.id ? Ox.extend(item, { form: form, format: format }) : item; }); self.$content = $('
    ') .css({padding: '16px'}); self.$select = Ox.Select({ items: self.items, label: 'Insert', labelWidth: 128, value: 'img', width: 384 }) .bindEvent({ change: renderForm }) .appendTo(self.$content); renderForm(); that = Ox.Dialog({ buttons: [ Ox.Button({ id: 'cancel', title: 'Cancel', width: 64 }) .bindEvent({ click: function() { that.close(); } }), Ox.Button({ id: 'insert', title: 'Insert', width: 64 }) .bindEvent({ click: function() { var item = Ox.getObjectById(self.items, self.$select.value()), value = item.format( item.form.length ? self.$form.values() : void 0 ); self.options.callback({ position: self.options.start + value.length, value: self.options.value.substr(0, self.options.start) + value + self.options.value.substr(self.options.end) }); that.close(); } }) ], closeButton: true, content: self.$content, height: 184, keys: {enter: 'insert', escape: 'cancel'}, title: 'Insert HTML', width: 416 + Ox.UI.SCROLLBAR_SIZE }); function renderForm() { var items = Ox.getObjectById(self.items, self.$select.value()).form; //Ox.print('??::""""????', self.$select.value()) self.$form && self.$form.remove(); if (items.length) { self.$form = Ox.Form({ items: items }) .css({paddingTop: '8px'}) .appendTo(self.$content); } } return that; };