123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- /**
- * Copyright (C) 2012-2013 KO GmbH <copyright@kogmbh.com>
- *
- * @licstart
- * This file is part of WebODF.
- *
- * WebODF is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License (GNU AGPL)
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * WebODF is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with WebODF. If not, see <http://www.gnu.org/licenses/>.
- * @licend
- *
- * @source: http://www.webodf.org/
- * @source: https://github.com/kogmbh/WebODF/
- */
- /*global define, require, runtime, ops */
- define("webodf/editor/widgets/paragraphStyles", [
- "dijit/form/Select",
- "dojox/html/entities",
- "webodf/editor/EditorSession"],
- function (Select, htmlEntities, EditorSession) {
- "use strict";
- /**
- * @constructor
- */
- var ParagraphStyles = function (callback) {
- var self = this,
- editorSession,
- select,
- defaultStyleUIId = ":default";
- this.widget = function () {
- return select;
- };
- /*
- * In this widget, we name the default style
- * (which is referred to as "" in webodf) as
- * ":default". The ":" is disallowed in an NCName, so this
- * avoids clashes with other styles.
- */
- this.value = function () {
- var value = select.get('value');
- if (value === defaultStyleUIId) {
- value = "";
- }
- return value;
- };
- this.setValue = function (value) {
- if (value === "") {
- value = defaultStyleUIId;
- }
- select.set('value', value, false);
- };
- // events
- this.onAdd = null;
- this.onRemove = null;
- /*jslint emptyblock: true*/
- this.onChange = function () {};
- /*jslint emptyblock: false*/
- function populateStyles() {
- var i, selectionList, availableStyles;
- // Populate the Default Style always
- selectionList = [{
- label: runtime.tr("Default Style"),
- value: defaultStyleUIId
- }];
- availableStyles = editorSession ? editorSession.getAvailableParagraphStyles() : [];
- for (i = 0; i < availableStyles.length; i += 1) {
- selectionList.push({
- label: htmlEntities.encode(availableStyles[i].displayName) || htmlEntities.encode(availableStyles[i].name),
- value: availableStyles[i].name
- });
- }
- select.removeOption(select.getOptions());
- select.addOption(selectionList);
- }
- function addStyle(styleInfo) {
- var stylens = "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
- newStyleElement;
- if (styleInfo.family !== 'paragraph') {
- return;
- }
- newStyleElement = editorSession.getParagraphStyleElement(styleInfo.name);
- select.addOption({
- label: htmlEntities.encode(newStyleElement.getAttributeNS(stylens, 'display-name')),
- value: styleInfo.name
- });
- if (self.onAdd) {
- self.onAdd(styleInfo.name);
- }
- }
- function removeStyle(styleInfo) {
- if (styleInfo.family !== 'paragraph') {
- return;
- }
- select.removeOption(styleInfo.name);
- if (self.onRemove) {
- self.onRemove(styleInfo.name);
- }
- }
- function handleCursorMoved(cursor) {
- var disabled = cursor.getSelectionType() === ops.OdtCursor.RegionSelection;
- select.setAttribute('disabled', disabled);
- }
- this.setEditorSession = function(session) {
- if (editorSession) {
- editorSession.unsubscribe(EditorSession.signalCommonStyleCreated, addStyle);
- editorSession.unsubscribe(EditorSession.signalCommonStyleDeleted, removeStyle);
- editorSession.unsubscribe(EditorSession.signalCursorMoved, handleCursorMoved);
- }
- editorSession = session;
- if (editorSession) {
- editorSession.subscribe(EditorSession.signalCommonStyleCreated, addStyle);
- editorSession.subscribe(EditorSession.signalCommonStyleDeleted, removeStyle);
- editorSession.subscribe(EditorSession.signalCursorMoved, handleCursorMoved);
- }
- select.setAttribute('disabled', !editorSession);
- populateStyles();
- };
- // init
- function init() {
- select = new Select({
- name: 'ParagraphStyles',
- maxHeight: 200,
- style: {
- width: '100px'
- }
- });
- // prevent browser translation service messing up ids
- select.domNode.setAttribute("translate", "no");
- select.domNode.classList.add("notranslate");
- select.dropDown.domNode.setAttribute("translate", "no");
- select.dropDown.domNode.classList.add("notranslate");
- populateStyles();
- // Call ParagraphStyles's onChange handler every time
- // the select's onchange is called, and pass the value
- // as reported by ParagraphStyles.value(), because we do not
- // want to expose the internal naming like ":default" outside this
- // class.
- select.onChange = function () {
- self.onChange(self.value());
- };
- return callback(self);
- }
- init();
- };
- return ParagraphStyles;
- });
|