I'm looking at the code I'm writing using SmartClient (not SmartGWT) and wondering just how much good obfuscation will do.
here is the input code
and here is the obfuscated version using http://marijnhaverbeke.nl/uglifyjs
If I were to add the newlines back in, the UI of the code is well, completely understandable. Is there some other way to do smartClient code that wouldn't leave my code out in the open so much?
We are still in the eval phase, and I'm not wanting to go to far down a path that has these kind of problems. Yes, our logic is not all the UI code, but considering the fact that anyone could buy/use smartClient and then drop our UI code in is still a bit scary.....
here is the input code
Code:
isc.Menu.create({ ID: "menu", autoDraw: false, showShadow: true, shadowDepth: 10, data: [ {title: "New", keyTitle: "Ctrl+N", icon: "icons/16/document_plain_new.png"}, {title: "Open", keyTitle: "Ctrl+O", icon: "icons/16/folder_out.png"}, {isSeparator: true}, {title: "Save", keyTitle: "Ctrl+S", icon: "icons/16/disk_blue.png"}, {title: "Save As", icon: "icons/16/save_as.png"}, {isSeparator: true}, {title: "Recent Documents", icon: "icons/16/folder_document.png", submenu: [ {title: "data.xml", checked: true}, {title: "Component Guide.doc"}, {title: "SmartClient.doc", checked: true}, {title: "AJAX.doc"} ]}, {isSeparator: true}, {title: "Export as...", icon: "icons/16/export1.png", submenu: [ {title: "XML"}, {title: "CSV"}, {title: "Plain text"} ]}, {isSeparator: true}, {title: "Print", enabled: false, keyTitle: "Ctrl+P", icon: "icons/16/printer3.png"} ] }); isc.ToolStripMenuButton.create({ ID: "menuButton", title: "File", menu: menu }); isc.ToolStripButton.create({ ID: "printButton", icon: "other/printer.png", title: "print" }); isc.ToolStripButton.create({ ID: "alignLeft", icon: "[SKIN]/RichTextEditor/text_align_left.png", actionType: "radio", radioGroup: "textAlign" }); isc.ToolStripButton.create({ ID: "alignRight", icon: "[SKIN]/RichTextEditor/text_align_right.png", actionType: "radio", radioGroup: "textAlign" }); isc.ToolStripButton.create({ ID: "alignCenter", icon: "[SKIN]/RichTextEditor/text_align_center.png", actionType: "radio", radioGroup: "textAlign" }); isc.ToolStripButton.create({ ID: "bold", icon: "[SKIN]/RichTextEditor/text_bold.png", actionType: "checkbox" }); isc.ToolStripButton.create({ ID: "italics", icon: "[SKIN]/RichTextEditor/text_italic.png", actionType: "checkbox" }); isc.ToolStripButton.create({ ID: "underlined", icon: "[SKIN]/RichTextEditor/text_underline.png", actionType: "checkbox" }); isc.DynamicForm.create({ ID: "fontSelector", showResizeBar:true, width:100, minWidth:50, numCols:1, fields: [ {name: "selectFont", showTitle: false, width:"*", valueMap: { "courier": "<span style='font-family:courier'>Courier</span>", "verdana": "<span style='font-family:verdana'>Verdana</span>", "times": "<span style='font-family:times'>Times</span>" }, defaultValue:"courier" } ] }); isc.DynamicForm.create({ ID: "zoomSelector", width:100, minWidth:50, numCols:1, fields: [ {name: "selectZoom", showTitle: false, width:"*", valueMap: ["50%", "75%", "100%", "150%", "200%", "Fit"], defaultValue:"100%" } ] }); isc.ToolStrip.create({ width: 450, height:24, members: [menuButton, "separator", printButton, "resizer", bold, italics, underlined, "separator", alignLeft, alignRight, alignCenter, "separator", fontSelector, "resizer", zoomSelector] });
Code:
isc.Menu.create({ID:"menu",autoDraw:!1,showShadow:!0,shadowDepth:10,data:[{title:"New",keyTitle:"Ctrl+N",icon:"icons/16/document_plain_new.png"},{title:"Open",keyTitle:"Ctrl+O",icon:"icons/16/folder_out.png"},{isSeparator:!0},{title:"Save",keyTitle:"Ctrl+S",icon:"icons/16/disk_blue.png"},{title:"Save As",icon:"icons/16/save_as.png"},{isSeparator:!0},{title:"Recent Documents",icon:"icons/16/folder_document.png",submenu:[{title:"data.xml",checked:!0},{title:"Component Guide.doc"},{title:"SmartClient.doc",checked:!0},{title:"AJAX.doc"}]},{isSeparator:!0},{title:"Export as...",icon:"icons/16/export1.png",submenu:[{title:"XML"},{title:"CSV"},{title:"Plain text"}]},{isSeparator:!0},{title:"Print",enabled:!1,keyTitle:"Ctrl+P",icon:"icons/16/printer3.png"}]}),isc.ToolStripMenuButton.create({ID:"menuButton",title:"File",menu:menu}),isc.ToolStripButton.create({ID:"printButton",icon:"other/printer.png",title:"print"}),isc.ToolStripButton.create({ID:"alignLeft",icon:"[SKIN]/RichTextEditor/text_align_left.png",actionType:"radio",radioGroup:"textAlign"}),isc.ToolStripButton.create({ID:"alignRight",icon:"[SKIN]/RichTextEditor/text_align_right.png",actionType:"radio",radioGroup:"textAlign"}),isc.ToolStripButton.create({ID:"alignCenter",icon:"[SKIN]/RichTextEditor/text_align_center.png",actionType:"radio",radioGroup:"textAlign"}),isc.ToolStripButton.create({ID:"bold",icon:"[SKIN]/RichTextEditor/text_bold.png",actionType:"checkbox"}),isc.ToolStripButton.create({ID:"italics",icon:"[SKIN]/RichTextEditor/text_italic.png",actionType:"checkbox"}),isc.ToolStripButton.create({ID:"underlined",icon:"[SKIN]/RichTextEditor/text_underline.png",actionType:"checkbox"}),isc.DynamicForm.create({ID:"fontSelector",showResizeBar:!0,width:100,minWidth:50,numCols:1,fields:[{name:"selectFont",showTitle:!1,width:"*",valueMap:{courier:"<span style='font-family:courier'>Courier</span>",verdana:"<span style='font-family:verdana'>Verdana</span>",times:"<span style='font-family:times'>Times</span>"},defaultValue:"courier"}]}),isc.DynamicForm.create({ID:"zoomSelector",width:100,minWidth:50,numCols:1,fields:[{name:"selectZoom",showTitle:!1,width:"*",valueMap:["50%","75%","100%","150%","200%","Fit"],defaultValue:"100%"}]}),isc.ToolStrip.create({width:450,height:24,members:[menuButton,"separator",printButton,"resizer",bold,italics,underlined,"separator",alignLeft,alignRight,alignCenter,"separator",fontSelector,"resizer",zoomSelector]})
We are still in the eval phase, and I'm not wanting to go to far down a path that has these kind of problems. Yes, our logic is not all the UI code, but considering the fact that anyone could buy/use smartClient and then drop our UI code in is still a bit scary.....
Comment