[Libreoffice-commits] online.git: loleaflet/build loleaflet/dist loleaflet/src

Henry Castro hcastro at collabora.com
Fri Nov 11 19:22:45 UTC 2016


 loleaflet/build/deps.js                       |    7 
 loleaflet/dist/images/lc_insertsymbol.png     |binary
 loleaflet/dist/loleaflet.css                  |   16 +
 loleaflet/dist/toolbar.css                    |    1 
 loleaflet/dist/toolbar/toolbar.js             |    6 
 loleaflet/src/control/Control.CharacterMap.js |  255 ++++++++++++++++++++++++++
 loleaflet/src/layer/tile/TileLayer.js         |   12 +
 7 files changed, 296 insertions(+), 1 deletion(-)

New commits:
commit 36474b21a647a728a6f53caab4ec7c34913ab0ae
Author: Henry Castro <hcastro at collabora.com>
Date:   Fri Nov 11 15:24:48 2016 -0400

    loleaflet: add special character

diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index b140214..cb394d8 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -301,6 +301,13 @@ var deps = {
 		desc: 'Document Repair'
 	},
 
+	ControlCharacterMap: {
+		src: ['control/Control.js',
+		      'control/Control.CharacterMap.js'],
+		heading: 'Controls',
+		desc: 'Character Map'
+	},
+
 	ControlContextmenu: {
 		src: ['control/Control.js',
 		      'control/Control.ContextMenu.js'],
diff --git a/loleaflet/dist/images/lc_insertsymbol.png b/loleaflet/dist/images/lc_insertsymbol.png
new file mode 100644
index 0000000..5d82d86
Binary files /dev/null and b/loleaflet/dist/images/lc_insertsymbol.png differ
diff --git a/loleaflet/dist/loleaflet.css b/loleaflet/dist/loleaflet.css
index 68cbdf2..60f5503 100644
--- a/loleaflet/dist/loleaflet.css
+++ b/loleaflet/dist/loleaflet.css
@@ -37,4 +37,18 @@ body {
     font-family: "Segoe UI", Tahoma, Arial, Helvetica, sans-serif !important;
     font-size: 12px !important;
     font-weight: normal !important;
-}
\ No newline at end of file
+}
+
+.loleaflet-character {
+	table-layout: fixed;
+	font: 17px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+	text-align: center;
+}
+
+.loleaflet-character td {
+	width: 20px;
+}
+
+.loleaflet-controls {
+	margin-right: 10px;
+}
diff --git a/loleaflet/dist/toolbar.css b/loleaflet/dist/toolbar.css
index 2713eec..093fc1a 100644
--- a/loleaflet/dist/toolbar.css
+++ b/loleaflet/dist/toolbar.css
@@ -269,6 +269,7 @@ button.leaflet-control-search-next
 .w2ui-icon.sortdescending{ background: url('../images/lc_sortdescending.png') no-repeat center !important; }
 .w2ui-icon.selected{ background: url('../images/lc_ok.png') no-repeat center !important; }
 .w2ui-icon.repair{ background: url('../images/lc_backward.png') no-repeat center !important; }
+.w2ui-icon.specialcharacter{ background: url('../images/lc_insertsymbol.png') no-repeat center !important; }
 
 .inserttable-pop {
     z-index: 100000;
diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index 4cbb63e..8c1a849 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -223,6 +223,11 @@ function onClick(id, item, subItem) {
 		map.fire('postMessage', {msgId: 'UI_Close'});
 		map.remove();
 	}
+	else if (id === 'specialcharacter') {
+		var fontList = $('.fonts-select option');
+		var selectedIndex = $('.fonts-select').prop('selectedIndex');
+		map._docLayer._onSpecialChar(fontList, selectedIndex);
+	}
 }
 
 function insertTable() {
@@ -373,6 +378,7 @@ $(function () {
 			{type: 'button',  id: 'inserttable',  img: 'inserttable', hint: _('Insert table')},
 			{type: 'button',  id: 'annotation', img: 'annotation', hint: _('Insert comment'), uno: 'InsertAnnotation'},
 			{type: 'button',  id: 'insertgraphic',  img: 'insertgraphic', hint: _('Insert graphic')},
+			{type: 'button',  id: 'specialcharacter', img: 'specialcharacter', hint: _('Special Character')},
 			{type: 'html', id: 'right'},
 			{type: 'button',  id: 'more', img: 'more', hint: _('More')},
 			{type: 'button',  id: 'close',  img: 'closedoc', hint: _('Close document'), hidden: true}
diff --git a/loleaflet/src/control/Control.CharacterMap.js b/loleaflet/src/control/Control.CharacterMap.js
new file mode 100644
index 0000000..77091ab
--- /dev/null
+++ b/loleaflet/src/control/Control.CharacterMap.js
@@ -0,0 +1,255 @@
+/*
+ * L.Control.CharacterMap.
+ */
+
+L.Control.CharacterMap = L.Control.extend({
+	options: {
+		position: 'topright'
+	},
+
+	unicodeCharts : [
+		{ innerHTML: _('Basic Latin'),				start: 0x0021, end: 0x007F },
+		{ innerHTML: _('Latin-1 Supplement'),			start: 0x0080, end: 0x00FF },
+		{ innerHTML: _('Latin Extended-A'),			start: 0x0100, end: 0x017F },
+		{ innerHTML: _('Latin Extended-B'),			start: 0x0180, end: 0x024F },
+		{ innerHTML: _('IPA Extensions'),			start: 0x0250, end: 0x02AF },
+		{ innerHTML: _('Spacing Modifier Letters'),		start: 0x02B0, end: 0x02FF },
+		{ innerHTML: _('Combining Diacritical Marks'),		start: 0x0300, end: 0x036F },
+		{ innerHTML: _('Greek'),				start: 0x0370, end: 0x03FF },
+		{ innerHTML: _('Cyrillic'),				start: 0x0400, end: 0x04FF },
+		{ innerHTML: _('Armenian'),				start: 0x0530, end: 0x058F },
+		{ innerHTML: _('Hebrew'),				start: 0x0590, end: 0x05FF },
+		{ innerHTML: _('Arabic'),				start: 0x0600, end: 0x06FF },
+		{ innerHTML: _('Syriac'),				start: 0x0700, end: 0x074F },
+		{ innerHTML: _('Thaana'),				start: 0x0780, end: 0x07BF },
+		{ innerHTML: _('Devanagari'),				start: 0x0900, end: 0x097F },
+		{ innerHTML: _('Bengali'),				start: 0x0980, end: 0x09FF },
+		{ innerHTML: _('Gurmukhi'),				start: 0x0A00, end: 0x0A7F },
+		{ innerHTML: _('Gujarati'),				start: 0x0A80, end: 0x0AFF },
+		{ innerHTML: _('Oriya'),				start: 0x0B00, end: 0x0B7F },
+		{ innerHTML: _('Tamil'),				start: 0x0B80, end: 0x0BFF },
+		{ innerHTML: _('Telugu'),				start: 0x0C00, end: 0x0C7F },
+		{ innerHTML: _('Kannada'),				start: 0x0C80, end: 0x0CFF },
+		{ innerHTML: _('Malayalam'),				start: 0x0D00, end: 0x0D7F },
+		{ innerHTML: _('Sinhala'),				start: 0x0D80, end: 0x0DFF },
+		{ innerHTML: _('Thai'),					start: 0x0E00, end: 0x0E7F },
+		{ innerHTML: _('Lao'),					start: 0x0E80, end: 0x0EFF },
+		{ innerHTML: _('Tibetan'),				start: 0x0F00, end: 0x0FFF },
+		{ innerHTML: _('Myanmar'),				start: 0x1000, end: 0x109F },
+		{ innerHTML: _('Georgian'),				start: 0x10A0, end: 0x10FF },
+		{ innerHTML: _('Hangul Jamo'),				start: 0x1100, end: 0x11FF },
+		{ innerHTML: _('Ethiopic'),				start: 0x1200, end: 0x137F },
+		{ innerHTML: _('Cherokee'),				start: 0x13A0, end: 0x13FF },
+		{ innerHTML: _('Unified Canadian Aboriginal Syllabics'),start: 0x1400, end: 0x167F },
+		{ innerHTML: _('Ogham'),				start: 0x1680, end: 0x169F },
+		{ innerHTML: _('Runic'),				start: 0x16A0, end: 0x16FF },
+		{ innerHTML: _('Khmer'),				start: 0x1780, end: 0x17FF },
+		{ innerHTML: _('Mongolian'),				start: 0x1800, end: 0x18AF },
+		{ innerHTML: _('Latin Extended Additional'),		start: 0x1E00, end: 0x1EFF },
+		{ innerHTML: _('Greek Extended'),			start: 0x1F00, end: 0x1FFF },
+		{ innerHTML: _('General Punctuation'),			start: 0x2000, end: 0x206F },
+		{ innerHTML: _('Superscripts and Subscripts'),		start: 0x2070, end: 0x209F },
+		{ innerHTML: _('Currency Symbols'),			start: 0x20A0, end: 0x20CF },
+		{ innerHTML: _('Combining Marks for Symbols'),		start: 0x20D0, end: 0x20FF },
+		{ innerHTML: _('Letterlike Symbols'),			start: 0x2100, end: 0x214F },
+		{ innerHTML: _('Number Forms'),				start: 0x2150, end: 0x218F },
+		{ innerHTML: _('Arrows'),				start: 0x2190, end: 0x21FF },
+		{ innerHTML: _('Mathematical Operators'),		start: 0x2200, end: 0x22FF },
+		{ innerHTML: _('Miscellaneous Technical'),		start: 0x2300, end: 0x23FF },
+		{ innerHTML: _('Control Pictures'),			start: 0x2400, end: 0x243F },
+		{ innerHTML: _('Optical Character Recognition'),	start: 0x2440, end: 0x245F },
+		{ innerHTML: _('Enclosed Alphanumerics'),		start: 0x2460, end: 0x24FF },
+		{ innerHTML: _('Box Drawing'),				start: 0x2500, end: 0x257F },
+		{ innerHTML: _('Block Elements'),			start: 0x2580, end: 0x259F },
+		{ innerHTML: _('Geometric Shapes'),			start: 0x25A0, end: 0x25FF },
+		{ innerHTML: _('Miscellaneous Symbols'),		start: 0x2600, end: 0x26FF },
+		{ innerHTML: _('Dingbats'),				start: 0x2700, end: 0x27BF },
+		{ innerHTML: _('Braille Patterns'),			start: 0x2800, end: 0x28FF },
+		{ innerHTML: _('CJK Radicals Supplement'),		start: 0x2E80, end: 0x2EFF },
+		{ innerHTML: _('Kangxi Radicals'),			start: 0x2F00, end: 0x2FDF },
+		{ innerHTML: _('Ideographic Description Characters'),	start: 0x2FF0, end: 0x2FFF },
+		{ innerHTML: _('CJK Symbols and Punctuation'),		start: 0x3000, end: 0x303F },
+		{ innerHTML: _('Hiragana'),				start: 0x3040, end: 0x309F },
+		{ innerHTML: _('Katakana'),				start: 0x30A0, end: 0x30FF },
+		{ innerHTML: _('Bopomofo'),				start: 0x3100, end: 0x312F },
+		{ innerHTML: _('Hangul Compatability Jamo'),		start: 0x3130, end: 0x318F },
+		{ innerHTML: _('Kanbun'),				start: 0x3190, end: 0x319F },
+		{ innerHTML: _('Bopomofo Extended'),			start: 0x31A0, end: 0x31BF },
+		{ innerHTML: _('Enclosed CJK Letters and Months'),	start: 0x3200, end: 0x32FF },
+		{ innerHTML: _('CJK Compatibility'),			start: 0x3300, end: 0x33FF },
+		{ innerHTML: _('CJK Unified Ideographs Extension A'),	start: 0x3400, end: 0x4DB5 },
+		{ innerHTML: _('CJK Unified Ideographs'),		start: 0x4E00, end: 0x9FFF },
+		{ innerHTML: _('Yi Syllables'),				start: 0xA000, end: 0xA48F },
+		{ innerHTML: _('Yi Radicals'),				start: 0xA490, end: 0xA4CF },
+		{ innerHTML: _('Hangul Syllables'),			start: 0xAC00, end: 0xD7A3 },
+		{ innerHTML: _('High Surrogates'),			start: 0xD800, end: 0xDB7F },
+		{ innerHTML: _('High Private Use Surrogates'),		start: 0xDB80, end: 0xDBFF },
+		{ innerHTML: _('Low Surrogates'),			start: 0xDC00, end: 0xDFFF },
+		//{ innerHTML: _('Private Use'),			start: 0xE000, end: 0xF8FF },
+		{ innerHTML: _('CJK Compatibility Ideographs'),		start: 0xF900, end: 0xFAFF },
+		{ innerHTML: _('Alphabetic Presentation Forms'),	start: 0xFB00, end: 0xFB4F },
+		{ innerHTML: _('Arabic Presentation Forms-A'),		start: 0xFB50, end: 0xFDFF },
+		{ innerHTML: _('Combining Half Marks'),			start: 0xFE20, end: 0xFE2F },
+		{ innerHTML: _('CJK Compatibility Forms'),		start: 0xFE30, end: 0xFE4F },
+		{ innerHTML: _('Small Form Variants'),			start: 0xFE50, end: 0xFE6F },
+		{ innerHTML: _('Arabic Presentation Forms-B'),		start: 0xFE70, end: 0xFEEE },
+		//{ innerHTML: _('Specials'),				start: 0xFEFF, end: 0xFEFF },
+		{ innerHTML: _('Halfwidth and Fullwidth Forms'),	start: 0xFF00, end: 0xFFEF },
+		//{ innerHTML: _('Specials'),				start: 0xFFF0, end: 0xFFFD }
+	],
+
+	fillCharacters: function (index) {
+		var start = this.unicodeCharts[index].start;
+		var end = this.unicodeCharts[index].end;
+		var it = 0;
+		var tr, td;
+		L.DomUtil.empty(this._tbody);
+		while (start <= end) {
+			if (it % 20 === 0) {
+				tr = L.DomUtil.create('tr', '', this._tbody);
+			}
+			td = L.DomUtil.create('td', '', tr);
+			td.innerHTML = '&#x' + start.toString(16);
+			td.data = start;
+			L.DomEvent.on(td, 'click', this._onSymbolClick, this);
+			start++;
+			it++;
+		}
+	},
+
+	fillDropDown: function(element, list, selectedIndex) {
+		for (var iterator = 0, len = list.length, option; iterator < len; iterator++) {
+			option = document.createElement('option');
+			option.innerHTML = list[iterator].innerHTML;
+			element.appendChild(option);
+		}
+		element.selectedIndex = selectedIndex;
+	},
+
+	fillFontNames: function (fontList, selectedIndex) {
+		this.fillDropDown(this._fontNames, fontList, selectedIndex);
+	},
+
+	initialize: function (options) {
+		L.setOptions(this, options);
+	},
+
+	onAdd: function (map) {
+		this._initLayout();
+
+		map.on('renderfont', this._onRenderFontPreview, this);
+		return this._container;
+	},
+
+	onRemove: function (map) {
+		map.off('renderfont', this._onRenderFontPreview, this);
+	},
+
+
+	show: function () {
+		this._tbody.setAttribute('style', 'max-height:' + this._map.getSize().y / 2 + 'px');
+		this._container.style.visibility = '';
+	},
+
+	_initLayout: function () {
+		this._container = L.DomUtil.create('div', 'leaflet-control-layers');
+		this._container.style.visibility = 'hidden';
+		var closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);
+		closeButton.href = '#close';
+		closeButton.innerHTML = '×';
+		L.DomEvent.on(closeButton, 'click', this._onCloseClick, this);
+		var wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);
+		var content = L.DomUtil.create('div', 'leaflet-popup-content', wrapper);
+		var labelTitle = document.createElement('span');
+		labelTitle.innerHTML = '<b>' + _('Special Characters') + '</b>';
+		content.appendChild(labelTitle);
+		content.appendChild(document.createElement('br'));
+		content.appendChild(document.createElement('br'));
+		this._unicodeChart = L.DomUtil.create('select', 'loleaflet-controls', content);
+		L.DomEvent.on(this._unicodeChart, 'change', this._onUnicodeChartChange, this);
+		content.appendChild(document.createElement('br'));
+		var table = L.DomUtil.create('table', 'loleaflet-character', content);
+		this._tbody = L.DomUtil.create('tbody', '', table);
+		content.appendChild(document.createElement('br'));
+		var label = L.DomUtil.create('span', 'loleaflet-controls', content);
+		label.innerHTML = '<b>' + _('Font Name:') + '</b>';
+		this._fontNames = L.DomUtil.create('select', 'loleaflet-controls', content);
+		L.DomEvent.on(this._fontNames, 'change', this._onFontNamesChange, this);
+		label = L.DomUtil.create('span', 'loleaflet-controls', content);
+		label.innerHTML = '<b>' + _('Hexadecimal:') + '</b>';
+		this._hexa = L.DomUtil.create('span', 'loleaflet-controls', content);
+		content.appendChild(document.createElement('br'));
+		content.appendChild(document.createElement('br'));
+		label = L.DomUtil.create('span', 'loleaflet-controls', content);
+		label.innerHTML = '<b>' + _('Preview:') + '</b>';
+		this._preview = L.DomUtil.create('img', '', content);
+		content.appendChild(document.createElement('br'));
+		content.appendChild(document.createElement('br'));
+		var button = L.DomUtil.create('input', 'loleaflet-controls', content);
+		button.type = 'button';
+		button.value = _('Insert');
+		L.DomEvent.on(button, 'click', this._onInsertClick, this);
+		button = L.DomUtil.create('input', 'loleaflet-controls', content);
+		button.type = 'button';
+		button.value = _('Cancel');
+		L.DomEvent.on(button, 'click', this._onCancelClick, this);
+		this.fillDropDown(this._unicodeChart, this.unicodeCharts, 0);
+		this.fillCharacters(this._unicodeChart.selectedIndex);
+	},
+
+	_onCancelClick: function (e) {
+		this._onCloseClick(e);
+	},
+
+	_onCloseClick: function (e) {
+		this._map.enable(true);
+		this._refocusOnMap();
+		this.remove();
+	},
+
+	_onFontNamesChange: function (e) {
+		/* if (this._hexa.data) {
+				window.encodeURIComponent(this._fontNames.options[this._fontNames.selectedIndex].value) +
+				' char=' + String.fromCharCode(this._hexa.data));
+		}*/
+	},
+
+	_onInsertClick: function (e) {
+		if (this._hexa.data) {
+			var command = {
+				Symbols: {
+					type: 'string',
+					value: String.fromCharCode(this._hexa.data)
+				},
+				FontName: {
+					type: 'string',
+					value: this._fontNames.options[this._fontNames.selectedIndex].value
+				}
+			};
+			this._map.sendUnoCommand('.uno:InsertSymbol', command);
+			this._onCloseClick(e);
+		}
+	},
+
+	_onRenderFontPreview: function (e) {
+		this._preview.src = e.img;
+	},
+
+	_onSymbolClick: function (e) {
+		var target = e.target || e.srcElement;
+		this._hexa.data = target.data;
+		this._hexa.innerHTML = 'U+' + target.data.toString(16).toUpperCase();
+		/*this._map._socket.sendMessage('renderfont font=' +
+			window.encodeURIComponent(this._fontNames.options[this._fontNames.selectedIndex].value) +
+			' char=' + String.fromCharCode(this._hexa.data));*/
+	},
+
+	_onUnicodeChartChange: function (e) {
+		var target = e.target || e.srcElement;
+		this.fillCharacters(target.selectedIndex);
+	}
+});
+
+L.control.characterMap = function (options) {
+	return new L.Control.CharacterMap(options);
+};
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index d575413..40ad0a3 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -604,6 +604,18 @@ L.TileLayer = L.GridLayer.extend({
 		}
 	},
 
+	_onSpecialChar: function(fontList, selectedIndex) {
+		if (!this._specialChar) {
+			this._specialChar = L.control.characterMap();
+		}
+		if (!this._specialChar.isVisible()) {
+			this._specialChar.addTo(this._map);
+			this._specialChar.fillFontNames(fontList, selectedIndex);
+			this._map.enable(false);
+			this._specialChar.show();
+		}
+	},
+
 	_onMousePointerMsg: function (textMsg) {
 		textMsg = textMsg.substring(14); // "mousepointer: "
 		textMsg = L.Cursor.getCustomCursor(textMsg) || textMsg;


More information about the Libreoffice-commits mailing list