summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/editor/plugins/ShowBlockNodes.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/editor/plugins/ShowBlockNodes.js')
-rw-r--r--js/dojo/dojox/editor/plugins/ShowBlockNodes.js188
1 files changed, 188 insertions, 0 deletions
diff --git a/js/dojo/dojox/editor/plugins/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/ShowBlockNodes.js
new file mode 100644
index 0000000..f1281fc
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/ShowBlockNodes.js
@@ -0,0 +1,188 @@
+//>>built
+define("dojox/editor/plugins/ShowBlockNodes", [
+ "dojo",
+ "dijit",
+ "dojox",
+ "dijit/_editor/_Plugin",
+ "dijit/form/Button",
+ "dijit/form/ToggleButton",
+ "dojo/_base/connect",
+ "dojo/_base/declare",
+ "dojo/i18n",
+ "dojo/i18n!dojox/editor/plugins/nls/ShowBlockNodes"
+], function(dojo, dijit, dojox) {
+
+dojo.declare("dojox.editor.plugins.ShowBlockNodes",dijit._editor._Plugin,{
+ // summary:
+ // This plugin provides ShowBlockNodes cabability to the editor. When
+ // clicked, the document in the editor will apply a class to specific
+ // block nodes to make them visible in the layout. This info is not
+ // exposed/extracted when the editor value is obtained, it is purely for help
+ // while working on the page.
+
+ // useDefaultCommand [protected] boolean
+ // Over-ride indicating that the command processing is done all by this plugin.
+ useDefaultCommand: false,
+
+ // iconClassPrefix: [const] String
+ // The CSS class name for the button node is formed from `iconClassPrefix` and `command`
+ iconClassPrefix: "dijitAdditionalEditorIcon",
+
+ // _styled [private] boolean
+ // Flag indicating the document has had the style updates applied.
+ _styled: false,
+
+ _initButton: function(){
+ // summary:
+ // Over-ride for creation of the preview button.
+ var strings = dojo.i18n.getLocalization("dojox.editor.plugins", "ShowBlockNodes");
+ this.button = new dijit.form.ToggleButton({
+ label: strings["showBlockNodes"],
+ showLabel: false,
+ iconClass: this.iconClassPrefix + " " + this.iconClassPrefix + "ShowBlockNodes",
+ tabIndex: "-1",
+ onChange: dojo.hitch(this, "_showBlocks")
+ });
+ this.editor.addKeyHandler(dojo.keys.F9, true, true, dojo.hitch(this, this.toggle));
+ },
+
+ updateState: function(){
+ // summary:
+ // Over-ride for button state control for disabled to work.
+ this.button.set("disabled", this.get("disabled"));
+ },
+
+ setEditor: function(editor){
+ // summary:
+ // Over-ride for the setting of the editor.
+ // editor: Object
+ // The editor to configure for this plugin to use.
+ this.editor = editor;
+ this._initButton();
+ },
+
+ toggle: function(){
+ // summary:
+ // Function to allow programmatic toggling of the view.
+ this.button.set("checked", !this.button.get("checked"));
+ },
+
+ _showBlocks: function(show){
+ // summary:
+ // Function to trigger printing of the editor document
+ // tags:
+ // private
+ var doc = this.editor.document;
+ if(!this._styled){
+ try{
+ //Attempt to inject our specialized style rules for doing this.
+ this._styled = true;
+
+ var style = "";
+ var blocks = ["div", "p", "ul", "ol", "table", "h1",
+ "h2", "h3", "h4", "h5", "h6", "pre", "dir", "center",
+ "blockquote", "form", "fieldset", "address", "object",
+ "pre", "hr", "ins", "noscript", "li", "map", "button",
+ "dd", "dt"];
+
+ var template = "@media screen {\n" +
+ "\t.editorShowBlocks {TAG} {\n" +
+ "\t\tbackground-image: url({MODURL}/images/blockelems/{TAG}.gif);\n" +
+ "\t\tbackground-repeat: no-repeat;\n" +
+ "\t\tbackground-position: top left;\n" +
+ "\t\tborder-width: 1px;\n" +
+ "\t\tborder-style: dashed;\n" +
+ "\t\tborder-color: #D0D0D0;\n" +
+ "\t\tpadding-top: 15px;\n" +
+ "\t\tpadding-left: 15px;\n" +
+ "\t}\n" +
+ "}\n";
+
+ dojo.forEach(blocks, function(tag){
+ style += template.replace(/\{TAG\}/gi, tag);
+ });
+
+ //Finally associate in the image locations based off the module url.
+ var modurl = dojo.moduleUrl(dojox._scopeName, "editor/plugins/resources").toString();
+ if(!(modurl.match(/^https?:\/\//i)) &&
+ !(modurl.match(/^file:\/\//i))){
+ // We have to root it to the page location on webkit for some nutball reason.
+ // Probably has to do with how iframe was loaded.
+ var bUrl;
+ if(modurl.charAt(0) === "/"){
+ //Absolute path on the server, so lets handle...
+ var proto = dojo.doc.location.protocol;
+ var hostn = dojo.doc.location.host;
+ bUrl = proto + "//" + hostn;
+ }else{
+ bUrl = this._calcBaseUrl(dojo.global.location.href);
+ }
+ if(bUrl[bUrl.length - 1] !== "/" && modurl.charAt(0) !== "/"){
+ bUrl += "/";
+ }
+ modurl = bUrl + modurl;
+ }
+ // Update all the urls.
+ style = style.replace(/\{MODURL\}/gi, modurl);
+ if(!dojo.isIE){
+ var sNode = doc.createElement("style");
+ sNode.appendChild(doc.createTextNode(style));
+ doc.getElementsByTagName("head")[0].appendChild(sNode);
+ }else{
+ var ss = doc.createStyleSheet("");
+ ss.cssText = style;
+ }
+ }catch(e){
+ console.warn(e);
+ }
+ }
+
+ // Apply/remove the classes based on state.
+ if(show){
+ dojo.addClass(this.editor.editNode, "editorShowBlocks");
+ }else{
+ dojo.removeClass(this.editor.editNode, "editorShowBlocks");
+ }
+ },
+
+ _calcBaseUrl: function(fullUrl) {
+ // summary:
+ // Internal function used to figure out the full root url (no relatives)
+ // for loading images in the styles in the iframe.
+ // fullUrl: String
+ // The full url to tear down to the base.
+ // tags:
+ // private
+ var baseUrl = null;
+ if (fullUrl !== null) {
+ // Check to see if we need to strip off any query parameters from the Url.
+ var index = fullUrl.indexOf("?");
+ if (index != -1) {
+ fullUrl = fullUrl.substring(0,index);
+ }
+
+ // Now we need to trim if necessary. If it ends in /, then we don't
+ // have a filename to trim off so we can return.
+ index = fullUrl.lastIndexOf("/");
+ if (index > 0 && index < fullUrl.length) {
+ baseUrl = fullUrl.substring(0,index);
+ }else{
+ baseUrl = fullUrl;
+ }
+ }
+ return baseUrl; //String
+ }
+});
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+ if(o.plugin){ return; }
+ var name = o.args.name.toLowerCase();
+ if(name === "showblocknodes"){
+ o.plugin = new dojox.editor.plugins.ShowBlockNodes();
+ }
+});
+
+return dojox.editor.plugins.ShowBlockNodes;
+
+});