summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Macdonald <Mark_MacDonald@ca.ibm.com>2013-01-24 14:17:02 -0500
committerMark Macdonald <Mark_MacDonald@ca.ibm.com>2013-01-24 14:17:02 -0500
commit79496386d1b21b76a60faaa4e374f6abe591a94c (patch)
tree6216ebf2132149833bbe746ffdedca283883b308
parent893a1cc1a54be986b84b651c2adf99e703858ef6 (diff)
downloadorg.eclipse.orion.client-origin/mark/plugin_maker.zip
org.eclipse.orion.client-origin/mark/plugin_maker.tar.gz
org.eclipse.orion.client-origin/mark/plugin_maker.tar.bz2
Restore the plugin makerorigin/mark/plugin_maker
Revert "Bug-397910 - removing the plugin maker from Orion" This reverts commit 4a5f767e55820cf01b0e6a167a74c01e7c177ef3.
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginCompletionSection.js48
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginDescriptionSection.js52
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginMakerContainer.js333
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainer.js217
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainerSection.js63
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/settings/maker.html28
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/settings/maker.js73
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/settings/orion-transparent.pngbin0 -> 3945 bytes
-rw-r--r--bundles/org.eclipse.orion.client.ui/web/settings/scroll.css274
9 files changed, 1088 insertions, 0 deletions
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginCompletionSection.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginCompletionSection.js
new file mode 100644
index 0000000..efd05c2
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginCompletionSection.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors: Anton McConville - IBM Corporation - initial API and implementation
+ ******************************************************************************/
+/*global dojo dijit widgets orion window console define localStorage*/
+/*jslint browser:true*/
+
+/* This SettingsContainer widget is a dojo border container with a left and right side. The left is for choosing a
+ category, the right shows the resulting HTML for that category. */
+
+define(['i18n!orion/settings/nls/messages', 'require', 'dojo', 'dijit', 'dijit/TooltipDialog', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'orion/widgets/plugin/PluginList', 'orion/widgets/maker/ScrollingContainerSection'], function(messages, require, dojo, dijit) {
+
+ dojo.declare("orion.widgets.maker.PluginCompletionSection", [orion.widgets.maker.ScrollingContainerSection], { //$NON-NLS-0$
+
+ content:'<form class="scrollForm" action="/" method="post">' + //$NON-NLS-0$
+ '<fieldset>' + //$NON-NLS-0$
+ '<div class="steps">' + //$NON-NLS-0$
+ '<a id="code" class="nextlink downloadbutton" style="float: left; background-color: #2dad2d;" target="_blank"><span style="display: inline-block;">'+messages['Edit Plugin JavaScript']+'</span></a>' + //$NON-NLS-2$ //$NON-NLS-0$
+ '<a id="installer" class="nextlink downloadbutton" style="padding-left:20px;float: left; background-color: #2dad2d;" target="_blank"><span style="display: inline-block;">'+messages['Install Plugin']+'</span></a>' + //$NON-NLS-2$ //$NON-NLS-0$
+ '</div>' + //$NON-NLS-0$
+ '</fieldset>' + //$NON-NLS-0$
+ '</form>', //$NON-NLS-0$
+
+ updateReferences: function( root, path, name ){
+ var installer = dojo.byId( "installer" ); //$NON-NLS-0$
+ installer.href = root + 'settings/settings.html#,category=plugins,installPlugin=' + path; //$NON-NLS-0$
+
+ var code = dojo.byId( "code" ); //$NON-NLS-0$
+ code.href = root + 'edit/edit.html#/file/FF/bundles/org.eclipse.orion.client.ui/web/plugins/' + name + '/' + name + '.js'; //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$
+ },
+
+ getData: function(){
+ var data = [];
+ data.id = this.sectionID;
+ data.name = dojo.byId( 'pluginname' ).value; //$NON-NLS-0$
+ data.author = dojo.byId( 'pluginauthor' ).value; //$NON-NLS-0$
+ data.licence = dojo.byId( 'pluginLicence' ).value; //$NON-NLS-0$
+ data.description = dojo.byId( 'pluginDescription' ).value; //$NON-NLS-0$
+ return data;
+ }
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginDescriptionSection.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginDescriptionSection.js
new file mode 100644
index 0000000..6cf90c4
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginDescriptionSection.js
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors: Anton McConville - IBM Corporation - initial API and implementation
+ ******************************************************************************/
+/*global dojo dijit widgets orion window console define localStorage*/
+/*jslint browser:true*/
+
+/* This SettingsContainer widget is a dojo border container with a left and right side. The left is for choosing a
+ category, the right shows the resulting HTML for that category. */
+
+define(['i18n!orion/settings/nls/messages', 'require', 'dojo', 'dijit', 'dijit/TooltipDialog', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'orion/widgets/plugin/PluginList', 'orion/widgets/maker/ScrollingContainerSection'], function(messages, require, dojo, dijit) {
+
+ dojo.declare("orion.widgets.maker.PluginDescriptionSection", [orion.widgets.maker.ScrollingContainerSection], { //$NON-NLS-0$
+
+ content: '<form class="scrollForm" action="/" method="post">' + //$NON-NLS-0$
+ '<fieldset>' + //$NON-NLS-0$
+ '<p class="first">' + //$NON-NLS-0$
+ '<label for="name">'+messages['Plugin Name:']+'</label>' + //$NON-NLS-2$ //$NON-NLS-0$
+ '<input type="text" name="name" id="pluginname" size="30">' + //$NON-NLS-0$
+ '</p>' + //$NON-NLS-0$
+ '<p>' + //$NON-NLS-0$
+ '<label for="email">'+messages['Author Name:']+'</label>' + //$NON-NLS-2$ //$NON-NLS-0$
+ '<input type="text" name="email" id="pluginauthor" size="30">' + //$NON-NLS-0$
+ '</p>' + //$NON-NLS-0$
+ '<p>' + //$NON-NLS-0$
+ '<label for="web">'+messages['Licence:']+'</label>' + //$NON-NLS-2$ //$NON-NLS-0$
+ '<input type="text" name="web" id="pluginLicence" size="30">' + //$NON-NLS-0$
+ '</p>' + //$NON-NLS-0$
+ '<p>' + //$NON-NLS-0$
+ '<label for="message">'+messages['Description:']+'</label>' +//$NON-NLS-2$ //$NON-NLS-0$
+ '<textarea name="message" id="pluginDescription" cols="30" rows="10"></textarea>' + //$NON-NLS-0$
+ '</p>' + //$NON-NLS-0$
+ '</fieldset>' + //$NON-NLS-0$
+ '</form>', //$NON-NLS-0$
+
+ getData: function(){
+ var data = [];
+ data.id = this.sectionID;
+ data.name = dojo.byId( 'pluginname' ).value; //$NON-NLS-0$
+ data.author = dojo.byId( 'pluginauthor' ).value; //$NON-NLS-0$
+ data.licence = dojo.byId( 'pluginLicence' ).value; //$NON-NLS-0$
+ data.description = dojo.byId( 'pluginDescription' ).value; //$NON-NLS-0$
+ return data;
+ }
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginMakerContainer.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginMakerContainer.js
new file mode 100644
index 0000000..e5258ac
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/PluginMakerContainer.js
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors: Anton McConville - IBM Corporation - initial API and implementation
+ ******************************************************************************/
+/*global dojo dijit widgets orion window console define localStorage*/
+/*jslint browser:true*/
+
+/* This SettingsContainer widget is a dojo border container with a left and right side. The left is for choosing a
+ category, the right shows the resulting HTML for that category. */
+
+define(['require', 'dojo', 'dijit', 'orion/commands', 'orion/fileClient', 'dijit/TooltipDialog', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'orion/widgets/plugin/PluginList', 'orion/widgets/maker/ScrollingContainer', 'orion/widgets/maker/PluginCompletionSection'], function(require, dojo, dijit, mCommands, mFileClient) {
+
+ dojo.declare("orion.widgets.maker.PluginMakerContainer", [orion.widgets.maker.ScrollingContainer], { //$NON-NLS-0$
+
+ fileClient: null,
+
+ path: '/file/FF/bundles/org.eclipse.orion.client.ui/web/plugins/', //$NON-NLS-0$
+
+ csscomplete: false,
+ jscomplete: false,
+ htmlcomplete: false,
+
+ postCreate: function(){
+
+ var bar = dojo.byId( 'pageToolbar' ); //$NON-NLS-0$
+ dojo.style( bar, 'borderBottom', '2px solid whitesmoke' ); //$NON-NLS-1$ //$NON-NLS-0$
+
+ var actions = dojo.byId( 'pageActions' ); //$NON-NLS-0$
+
+ this.sectionNavigation = dojo.create( 'div', null, actions ); //$NON-NLS-0$
+
+ this.sectionList = [];
+
+ this.fileClient = new mFileClient.FileClient(this.serviceRegistry);
+ },
+
+
+ addCommand: function( name, command ){
+
+ var id = "orion.add" + name; //$NON-NLS-0$
+ var tooltip = name;
+
+ var createPluginCommand = new mCommands.Command({
+ name: name,
+ tooltip: tooltip,
+ id: id,
+ anchor: name,
+ callback: dojo.hitch( this, command )
+ });
+
+ this.commandService.addCommand(createPluginCommand);
+ this.commandService.registerCommandContribution(this.toolbarID, id, 2);
+ this.commandService.renderCommands(this.toolbarID, this.toolbarID, this, this, "button"); //$NON-NLS-0$
+
+ var nodes = dojo.query(".commandButton"); //$NON-NLS-0$
+
+ for( var n = 0; n < nodes.length; n++ ){
+ nodes[n].style.padding = '3px'; //$NON-NLS-0$
+ }
+ },
+
+
+ handleError: function(error){
+ console.log( error );
+ },
+
+ handleSuccess: function(media, name ){
+
+ switch( media ){
+ case 'css': //$NON-NLS-0$
+ this.csscomplete = true;
+ break;
+
+ case 'js': //$NON-NLS-0$
+ this.jscomplete = true;
+ break;
+
+ case 'html': //$NON-NLS-0$
+ this.htmlcomplete = true;
+ break;
+ }
+
+ if( this.csscomplete && this.htmlcomplete && this.jscomplete ){
+
+
+ var root = window.location.href.split('settings')[0]; //$NON-NLS-0$
+
+ var pluginPath = root + 'plugins/' + name + '/' + name + '.html'; //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$
+
+ var source;
+
+ var complete = orion.widgets.maker.PluginCompletionSection({title:"Next Steps"}); //$NON-NLS-0$
+
+ var createButton = dojo.byId( 'buttonorion.addCreate0' ); //$NON-NLS-0$
+ createButton.parentNode.removeChild(createButton);
+
+ var menuItem = this.addSection( complete );
+
+ var event = [];
+ event.currentTarget = menuItem;
+
+ this.scrollTo( event );
+
+ complete.updateReferences( root, pluginPath, name );
+ }
+ },
+
+ writeJSContent: function(){
+
+ var content = this.prepareJSContent();
+ var def = this.fileClient.write( this.javascriptFile, content );
+ var progress = this.serviceRegistry.getService("orion.page.progress");
+ if(progress){
+ progress.progress(def, "Writing javascript content for " + this.pluginName);
+ }
+ def.then(
+ dojo.hitch(this, 'handleSuccess', 'js', this.pluginName ), //$NON-NLS-1$ //$NON-NLS-0$
+ this.handleError);
+ },
+
+ writeCSSContent: function(){
+
+ var content = '.plugin{\n' + //$NON-NLS-0$
+ '\tborder:solid 5px #ebf4fb;\n' + //$NON-NLS-0$
+ '\twidth: 400px;\n' + //$NON-NLS-0$
+ '\theight: 400px;\n' + //$NON-NLS-0$
+ '\tposition: absolute;\n' + //$NON-NLS-0$
+ '\tleft: 50%;\n' + //$NON-NLS-0$
+ '\ttop: 50%;\n' + //$NON-NLS-0$
+ '\tmargin-left: -200px;\n' + //$NON-NLS-0$
+ '\tmargin-top: -200px;\n' + //$NON-NLS-0$
+ '\tborder-radius:5px;\n' + //$NON-NLS-0$
+ '}\n\n' + //$NON-NLS-0$
+
+ '.banner{\n' + //$NON-NLS-0$
+ '\tfont-size:14px;\n' + //$NON-NLS-0$
+ '\tfont-weight:bold;\n' + //$NON-NLS-0$
+ '\tmargin:14px;\n' + //$NON-NLS-0$
+ '\tcolor:#5b6e79;\n' + //$NON-NLS-0$
+ '\ttext-align:center;\n' + //$NON-NLS-0$
+ '\tmargin-top:50px;\n' + //$NON-NLS-0$
+ '}\n\n' + //$NON-NLS-0$
+
+ '.title{\n' + //$NON-NLS-0$
+ '\tfont-size:20px;\n' + //$NON-NLS-0$
+ '\tfont-weight:bold;\n' + //$NON-NLS-0$
+ '\tmargin:10px;\n' + //$NON-NLS-0$
+ '\tcolor:#5b6e79;\n' + //$NON-NLS-0$
+ '\ttext-align:center;\n' + //$NON-NLS-0$
+ '}\n\n' + //$NON-NLS-0$
+
+ '.author{\n' + //$NON-NLS-0$
+ '\tfont-size:14px;\n' + //$NON-NLS-0$
+ '\tfont-weight:bold;\n' + //$NON-NLS-0$
+ '\tmargin:10px;\n' + //$NON-NLS-0$
+ '\tcolor:#5b6e79;\n' + //$NON-NLS-0$
+ '\ttext-align:center;\n' + //$NON-NLS-0$
+ '}\n\n' + //$NON-NLS-0$
+
+ '.created{\n' + //$NON-NLS-0$
+ '\tfont-size:14px;\n' + //$NON-NLS-0$
+ '\tfont-weight:bold;\n' + //$NON-NLS-0$
+ '\tmargin:10px;\n' + //$NON-NLS-0$
+ '\tcolor:#5b6e79;\n' + //$NON-NLS-0$
+ '\ttext-align:center;\n' + //$NON-NLS-0$
+ '}\n\n' + //$NON-NLS-0$
+
+ '.description{\n' + //$NON-NLS-0$
+ '\tfont-size:14px;\n' + //$NON-NLS-0$
+ '\tfont-weight:bold;\n' + //$NON-NLS-0$
+ '\tborder-top: 1px solid #b7ddf2;\n' + //$NON-NLS-0$
+ '\tmargin:10px;\n' + //$NON-NLS-0$
+ '\tmargin-top:15px;\n' + //$NON-NLS-0$
+ '\tpadding:15px;\n' + //$NON-NLS-0$
+ '\tcolor:#5b6e79;\n' + //$NON-NLS-0$
+ '\ttext-align:center;\n' + //$NON-NLS-0$
+ '\twidth:275px;\n' + //$NON-NLS-0$
+ '\tmargin-left:50px;\n' + //$NON-NLS-0$
+ '\tmargin-right:100px;\n' + //$NON-NLS-0$
+ '\tline-height:20px;\n' + //$NON-NLS-0$
+ '}'; //$NON-NLS-0$
+
+ var def = this.fileClient.write( this.cssFile, content );
+ var progress = this.serviceRegistry.getService("orion.page.progress");
+ if(progress){
+ progress.progress(def, "Writing css content for " + this.pluginName);
+ }
+ def.then(
+ dojo.hitch(this, 'handleSuccess', 'css', this.pluginName ), //$NON-NLS-1$ //$NON-NLS-0$
+ this.handleError);
+
+ },
+
+ writeHTMLContent: function(){
+
+ var content = this.prepareHTMLContent();
+
+ var def = this.fileClient.write( this.htmlFile, content );
+ var progress = this.serviceRegistry.getService("orion.page.progress");
+ if(progress){
+ progress.progress(def, "Writing html content for " + this.pluginName);
+ }
+ def.then(dojo.hitch(this, 'handleSuccess', 'html', this.pluginName), //$NON-NLS-1$ //$NON-NLS-0$
+ this.handleError);
+ },
+
+ createNewFolder: function( name ){
+ var def = this.fileClient.createFolder( this.path, name );
+ var progress = this.serviceRegistry.getService("orion.page.progress");
+ if(progress){
+ progress.progress(def, "Creating folder " + name);
+ }
+ def.then(dojo.hitch(this, 'createNewFiles'), //$NON-NLS-0$
+ this.handleError);
+ },
+
+ createNewFiles: function( filename ){
+
+ var pluginjs = this.pluginName + '.js'; //$NON-NLS-0$
+ var pluginhtml = this.pluginName + '.html'; //$NON-NLS-0$
+ var plugincss = this.pluginName + '.css'; //$NON-NLS-0$
+
+ this.javascriptFile = this.path + '/' + this.pluginName + '/' + pluginjs; //$NON-NLS-1$ //$NON-NLS-0$
+ this.htmlFile = this.path + '/' + this.pluginName + '/' + pluginhtml; //$NON-NLS-1$ //$NON-NLS-0$
+ this.cssFile = this.path + '/' + this.pluginName + '/' + plugincss; //$NON-NLS-1$ //$NON-NLS-0$
+
+ var progress = this.serviceRegistry.getService("orion.page.progress");
+ var def = this.fileClient.createFile( this.path + '/' + this.pluginName , pluginjs );
+ if(progress){
+ progress.progress("Creating javascript file for plugin " + this.pluginName);
+ }
+ def.then( //$NON-NLS-0$
+ dojo.hitch(this, 'writeJSContent'), //$NON-NLS-0$
+ this.handleError);
+
+
+ def = this.fileClient.createFile( this.path + '/' + this.pluginName , pluginhtml )
+ if(progress){
+ progress.progress("Creating html file for plugin " + this.pluginName);
+ }
+ def.then( //$NON-NLS-0$
+ dojo.hitch(this, 'writeHTMLContent'), //$NON-NLS-0$
+ this.handleError);
+
+ def = this.fileClient.createFile( this.path + '/' + this.pluginName , plugincss )
+ if(progress){
+ progress.progress("Creating css file for plugin " + this.pluginName);
+ }
+ def.then( //$NON-NLS-0$
+ dojo.hitch(this, 'writeCSSContent'), //$NON-NLS-0$
+ this.handleError);
+ },
+
+ prepareHTMLContent: function(){
+ var filecontent = '<!DOCTYPE html>\n' + //$NON-NLS-0$
+ '<html>\n' + //$NON-NLS-0$
+ '\t<head>\n' + //$NON-NLS-0$
+ '\t\t<meta charset="UTF-8"/>\n' + //$NON-NLS-0$
+ '\t\t<title>' + this.pluginName + '</title>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t<link rel=StyleSheet href="' + this.pluginName + '.css" type="text/css"></link>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t<script src="../../orion/plugin.js"></script>\n' + //$NON-NLS-0$
+ '\t\t<script src="' + this.pluginName + '.js"></script>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t<script>\n' + //$NON-NLS-0$
+ '\t\t</script>\n' + //$NON-NLS-0$
+ '\t</head>\n' + //$NON-NLS-0$
+ '\t<body>\n' + //$NON-NLS-0$
+ '\t\t<div class="plugin">\n' + //$NON-NLS-0$
+ '\t\t\t<div class="banner">An Eclipse Orion Plugin</div>\n' + //$NON-NLS-0$
+ '\t\t\t<div class="title"> - ' + this.pluginName + ' - </div>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t\t<div class="author">Written by ' + this.pluginAuthor + '</div>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t\t<div class="created">Created 13.04.2012</div>\n' + //$NON-NLS-0$
+ '\t\t\t<div class="description">' + this.pluginDescription + '</div>\n' + //$NON-NLS-1$ //$NON-NLS-0$
+ '\t\t</div>\n' + //$NON-NLS-0$
+ '\t</body>\n' + //$NON-NLS-0$
+ '</html>'; //$NON-NLS-0$
+
+ return filecontent;
+ },
+
+ prepareJSContent: function(){
+ var filecontent = '/*global console eclipse CSSLint window*/\n\n' + //$NON-NLS-0$
+ 'window.onload = function() {\n' + //$NON-NLS-0$
+ '\tvar provider = new orion.PluginProvider();\n' + //$NON-NLS-0$
+ '\tvar serviceImpl = {\n' + //$NON-NLS-0$
+ '\t\trun: function(text) {\n' + //$NON-NLS-0$
+ '\t\t\treturn text.split("").reverse().join("");\n' + //$NON-NLS-0$
+ '\t\t}\n' + //$NON-NLS-0$
+ '\t};\n' + //$NON-NLS-0$
+ '\tvar serviceProperties = {\n' + //$NON-NLS-0$
+ '\t\tname: "Reverse Text",\n' + //$NON-NLS-0$
+ '\t\tkey: ["e", true, true] // Ctrl+Shift+e\n' + //$NON-NLS-0$
+ '\t};\n' + //$NON-NLS-0$
+ '\tprovider.registerService("orion.edit.command", serviceImpl, serviceProperties);\n' + //$NON-NLS-0$
+ '\tprovider.connect();\n' + //$NON-NLS-0$
+ '};'; //$NON-NLS-0$
+ return filecontent;
+ },
+
+ createPlugin: function( item ){
+
+ for( var s = 0; s < this.sectionList.length; s++ ){
+ var d = this.sectionList[s].getData();
+
+ if( d.id === "Plugin Description Section" ){ //$NON-NLS-0$
+
+ this.pluginAuthor = d.author;
+ this.pluginName = d.name;
+ this.pluginDescription = d.description;
+ this.pluginLicence = d.licence;
+
+ this.createNewFolder( this.pluginName );
+ }
+ }
+ },
+
+ addCreationCommand: function(){
+
+ },
+
+ resize: function( size ){
+ var mb = dojo.marginBox ( this.scontent );
+ dojo.style( this.scontent, 'width', mb.w + 'px' ); //$NON-NLS-1$ //$NON-NLS-0$
+ dojo.style( this.domNode.parentNode, 'overflow', 'auto' ); //$NON-NLS-1$ //$NON-NLS-0$
+ }
+
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainer.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainer.js
new file mode 100644
index 0000000..afc5661
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainer.js
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors: Anton McConville - IBM Corporation - initial API and implementation
+ ******************************************************************************/
+/*global dojo dijit widgets orion window console define localStorage*/
+/*jslint browser:true*/
+
+/* This SettingsContainer widget is a dojo border container with a left and right side. The left is for choosing a
+ category, the right shows the resulting HTML for that category. */
+
+define(['require', 'dojo', 'dijit', 'orion/fileClient','dijit/TooltipDialog', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'orion/widgets/plugin/PluginList', 'orion/widgets/settings/InputBuilder'], function(require, dojo, dijit, mFileClient) {
+
+ dojo.declare("orion.widgets.maker.ScrollingContainer", [dijit._Widget, dijit._Templated], { //$NON-NLS-0$
+
+ templateString: '<div>' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="scontent" class="scrollcontent">' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="sections" style="padding-bottom:200px;"></div>' + //$NON-NLS-0$
+ '</div>' + //$NON-NLS-0$
+ '</div>', //$NON-NLS-0$
+
+ scrolling: false,
+ offset: null,
+ travel: null,
+ selectedNode: null,
+ sectionCount: 0,
+ lastScroll: 0,
+ sectionList: null,
+
+ postCreate: function(){
+
+ var bar = dojo.byId( 'pageToolbar' ); //$NON-NLS-0$
+ dojo.style( bar, 'borderBottom', '2px solid whitesmoke' ); //$NON-NLS-1$ //$NON-NLS-0$
+
+ var actions = dojo.byId( 'pageActions' ); //$NON-NLS-0$
+
+ this.sectionNavigation = dojo.create( 'div', null, actions ); //$NON-NLS-0$
+
+ this.sectionList = [];
+
+ this.fileClient = new mFileClient.FileClient(this.serviceRegistry);
+
+ dojo.style( this.domNode.parentNode, 'background', 'white' ); //$NON-NLS-1$ //$NON-NLS-0$
+ },
+
+
+ addCommand: function( name, command ){
+
+ var id = "orion.add" + name; //$NON-NLS-0$
+ var tooltip = name;
+
+ var createPluginCommand = new mCommands.Command({
+ name: name,
+ tooltip: tooltip,
+ id: id,
+ anchor: name,
+ callback: dojo.hitch( this, command )
+
+ });
+
+ this.commandService.addCommand(createPluginCommand);
+ this.commandService.registerCommandContribution(this.toolbarID, id, 2);
+ this.commandService.renderCommands(this.toolbarID, this.toolbarID, this, this, "button"); //$NON-NLS-0$
+
+ var nodes = dojo.query(".commandButton"); //$NON-NLS-0$
+
+ for( var n = 0; n < nodes.length; n++ ){
+ nodes[n].style.padding = '3px'; //$NON-NLS-0$
+ }
+
+ },
+
+ complete: function(name){
+ window.location.hash = name;
+ this.scrolling = false;
+ },
+
+ rate: function(score){
+
+ var rate = Math.max(Math.abs(Math.round(score/ 3)), 1200);
+ return rate;
+ },
+
+ fourthRoot: function(n){
+ return n*n*n*n;
+ },
+
+ roll: function(name, time){
+
+ var ease = ( new Date().getTime() ) - time;
+ var decrement = 2;
+ var constant = 0.5;
+
+ if( ease >= this.value ){
+
+ window.clearInterval( this.interval );
+ this.complete( name );
+
+ }else{
+
+ var rate = ease / this.value;
+ ease = decrement * rate;
+
+ if( ease < 1 ){
+ ease = constant * this.fourthRoot(ease);
+ }else{
+ ease -= decrement;
+ ease = -constant * ( this.fourthRoot(ease) - decrement );
+ }
+
+ this.lastScroll = this.offset + this.travel * ease;
+
+ console.log( 'POINT: ' + this.lastScroll ); //$NON-NLS-0$
+
+ dojo.byId( 'centerPane' ).scrollTop = this.lastScroll; //$NON-NLS-0$
+ }
+ },
+
+ smooth: function( name ){
+ var date = new Date().getTime();
+ this.interval = window.setInterval( dojo.hitch( this, 'roll', name, date ), 15 ); //$NON-NLS-0$
+ },
+
+ adjust: function( node ){
+ dojo.removeClass( this.selectedNode, 'smiSelected' ); //$NON-NLS-0$
+ this.selectedNode = node;
+ dojo.addClass( this.selectedNode, 'smiSelected' ); //$NON-NLS-0$
+ },
+
+ position: function(element){
+ var coordinate = { x: 0, y: 0 };
+ if( element !== null ){
+ coordinate.x += element.offsetLeft;
+ coordinate.y += element.offsetTop;
+ element = element.offsetParent;
+ }
+ return coordinate;
+ },
+
+ scrollTo: function(event){
+
+ this.scrolling = true;
+
+ try{
+ var targetName = event.currentTarget.href.split("#")[1]; //$NON-NLS-0$
+ var targetNode = dojo.byId( targetName );
+ this.offset = this.lastScroll;
+ this.travel = this.position( targetNode ).y - this.offset;
+ this.value = this.rate( this.travel );
+ this.smooth( targetName );
+ this.adjust( event.currentTarget );
+ }catch(e){
+ console.error(e);
+ return true;
+ }
+ },
+
+ createMenuItem: function( name, count ){
+
+ var content = { 'class':'scrollmenuitem', //$NON-NLS-1$ //$NON-NLS-0$
+ 'href': '#' + name, //$NON-NLS-1$ //$NON-NLS-0$
+ 'data-dojo-attach-point':name, //$NON-NLS-0$
+ 'onclick': dojo.hitch( this, 'scrollTo' ) //$NON-NLS-1$ //$NON-NLS-0$
+ };
+ content.textContent = name;
+
+ var menuItem = dojo.create( 'a', content ); //$NON-NLS-0$
+
+ if( !this.selectedNode ){
+ this.selectedNode = menuItem;
+ dojo.addClass( this.selectedNode, 'smiSelected' ); //$NON-NLS-0$
+ }
+
+ var listItem = dojo.create( 'li' ); //$NON-NLS-0$
+
+ listItem.appendChild( menuItem );
+
+ var counter = dojo.create( 'div', { 'class':'itemcount' }, listItem ); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$
+ counter.textContent = count;
+
+ var actions = dojo.byId( 'pageActions' ); //$NON-NLS-0$
+
+ dojo.byId( this.toolbarID ).appendChild( listItem );
+
+ return menuItem;
+ },
+
+ /* This will need a ScrolingContainerSection object */
+
+ addSection: function(section){
+ this.sectionList.push(section);
+ this.sectionCount = this.sectionCount +1;
+ section.setOrder( this.sectionCount );
+ var menuItem = this.createMenuItem( section.title, this.sectionCount );
+ this.sections.appendChild( section.domNode );
+ section.startup();
+
+ return menuItem;
+ },
+
+ addCreationCommand: function(){
+
+ },
+
+ resize: function( size ){
+ var mb = dojo.marginBox ( this.scontent );
+ dojo.style( this.scontent, 'width', mb.w + 'px' ); //$NON-NLS-1$ //$NON-NLS-0$
+ dojo.style( this.domNode.parentNode, 'overflow', 'auto' ); //$NON-NLS-1$ //$NON-NLS-0$
+ }
+
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainerSection.js b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainerSection.js
new file mode 100644
index 0000000..52080d9
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/orion/widgets/maker/ScrollingContainerSection.js
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors: Anton McConville - IBM Corporation - initial API and implementation
+ ******************************************************************************/
+/*global dojo dijit widgets orion window console define localStorage*/
+/*jslint browser:true*/
+
+/* This SettingsContainer widget is a dojo border container with a left and right side. The left is for choosing a
+ category, the right shows the resulting HTML for that category. */
+
+define(['require', 'dojo', 'dijit','dijit/TooltipDialog', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'orion/widgets/plugin/PluginList', 'orion/widgets/settings/InputBuilder'], function(require, dojo, dijit) {
+
+ dojo.declare("orion.widgets.maker.ScrollingContainerSection", [dijit._Widget, dijit._Templated], { //$NON-NLS-0$
+
+ templateString: '<div>' + //$NON-NLS-0$
+ '<a class="anchor" data-dojo-attach-point="anchor" id="section" name="section"></a>' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="section" class="sectionBlock">' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="contentArea" class="inner">' + //$NON-NLS-0$
+ '</div>' + //$NON-NLS-0$
+ '</div>' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="sectionTitle" class="pluginTitle"></div>' + //$NON-NLS-0$
+ '<div data-dojo-attach-point="orderCircle" class="circle">1</div>' + //$NON-NLS-0$
+ '</div>', //$NON-NLS-0$
+
+ content: "<div></div>", //$NON-NLS-0$
+
+ order: 1,
+
+ postCreate: function(){
+ this.sectionID = this.title + ' Section'; //$NON-NLS-0$
+ this.selectedNode = this.home;
+ this.anchor.id = this.title;
+ this.anchor.name = this.title;
+ this.sectionTitle.textContent = this.title;
+ },
+
+ startup: function(){
+ var mb = dojo.position( this.domNode );
+ var parentmb = dojo.position( this.domNode.parentNode );
+ this.sectionTitle.style.top = mb.y - parentmb.y - 18 + 'px'; //$NON-NLS-0$
+ this.orderCircle.style.top = mb.y - parentmb.y + 30 + 'px'; //$NON-NLS-0$
+ dojo.place( this.content, this.contentArea );
+ },
+
+ setOrder: function( order ){
+ this.order = order;
+ this.orderCircle.textContent = this.order;
+ },
+
+ getData: function(){
+ var data = [];
+ data.id = this.sectionID;
+ return data;
+ }
+
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/settings/maker.html b/bundles/org.eclipse.orion.client.ui/web/settings/maker.html
new file mode 100644
index 0000000..ae9c11c
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/settings/maker.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Plugin Maker</title>
+ <link rel="stylesheet" type="text/css" href="scroll.css"/>
+ <script src="../requirejs/require.js"></script>
+ <script type="text/javascript">
+ /*global require*/
+ require({ baseUrl: '..',
+ packages: [{ name: 'dojo', location: 'org.dojotoolkit/dojo', main: 'lib/main-browser', lib: '.' },
+ { name: 'dijit', location: 'org.dojotoolkit/dijit', main: 'lib/main',lib: '.' },
+ { name: 'dojox', location: 'org.dojotoolkit/dojox', main: 'lib/main', lib: '.' } ],
+ paths: { text: 'requirejs/text', i18n: 'requirejs/i18n', domReady: 'requirejs/domReady' }
+ });
+ require(["maker.js"]);
+ </script>
+ </head>
+ <body style="visibility:hidden;" class="claro">
+ <div id="orion.maker" class="orionPage" dojotype="dijit.layout.BorderContainer" style="height:100%;width:100%" design="headline" gutters="false">
+ <div class="banner" id="banner" dojotype="dijit.layout.ContentPane" region="top"></div>
+ <div id="centerPane" dojotype="dijit.layout.ContentPane" region="center">
+ <div id="selectionAgent"></div>
+ </div>
+ <div class="footer" id="footer" dojotype="dijit.layout.ContentPane" region="bottom" splitter="false"></div>
+ </div>
+ </body>
+</html>
diff --git a/bundles/org.eclipse.orion.client.ui/web/settings/maker.js b/bundles/org.eclipse.orion.client.ui/web/settings/maker.js
new file mode 100644
index 0000000..a4a600a
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/settings/maker.js
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * @license
+ * Copyright (c) 2011, 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License v1.0
+ * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
+ * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
+ *
+ * Contributors:
+ * Anton McConville (IBM Corporation) - initial API and implementation
+ *
+ *******************************************************************************/
+/*global define dojo dijit orion window widgets localStorage*/
+/*jslint browser:true devel:true*/
+
+define(['i18n!orion/settings/nls/messages', 'require', 'dojo', 'orion/bootstrap', 'orion/status', 'orion/commands', 'orion/operationsClient',
+ 'orion/fileClient', 'orion/searchClient', 'orion/dialogs', 'orion/globalCommands', 'orion/sites/siteClient',
+ 'dojo/parser', 'dojo/hash', 'dojo/date/locale', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane',
+ 'orion/widgets/maker/PluginMakerContainer', 'orion/widgets/maker/ScrollingContainerSection',
+ 'orion/widgets/maker/PluginDescriptionSection', 'orion/widgets/maker/PluginCompletionSection', 'dijit/form/Button',
+ 'dijit/ColorPalette'],
+ function(messages, require, dojo, mBootstrap, mStatus, mCommands, mOperationsClient, mFileClient, mSearchClient,
+ mDialogs, mGlobalCommands) {
+
+ dojo.addOnLoad(function() {
+ mBootstrap.startup().then(function(core) {
+
+ var serviceRegistry = core.serviceRegistry;
+ var preferences = core.preferences;
+
+ document.body.style.visibility = "visible"; //$NON-NLS-0$
+ dojo.parser.parse();
+
+ // Register services
+ var operationsClient = new mOperationsClient.OperationsClient(serviceRegistry);
+ var preferencesStatusService = new mStatus.StatusReportingService(serviceRegistry, operationsClient, "statusPane", "notifications", "notificationArea"); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$
+ var commandService = new mCommands.CommandService({
+ serviceRegistry: serviceRegistry
+ });
+
+ var fileClient = new mFileClient.FileClient(serviceRegistry);
+ var searcher = new mSearchClient.Searcher({
+ serviceRegistry: serviceRegistry,
+ commandService: commandService,
+ fileService: fileClient
+ });
+
+ var preferenceDialogService = new mDialogs.DialogService(serviceRegistry);
+ mGlobalCommands.generateBanner("banner", serviceRegistry, commandService, preferences, searcher); //$NON-NLS-0$
+
+ preferencesStatusService.setMessage("Loading..."); //$NON-NLS-0$
+
+ /* Note 'pageActions' is the attach id for commands in the toolbar */
+
+ var containerParameters = { preferences: preferences,
+ serviceRegistry: core.serviceRegistry,
+ preferencesStatusService: preferencesStatusService,
+ commandService: commandService,
+ preferenceDialogService: preferenceDialogService,
+ settingsCore: core,
+ toolbarID: "pageActions" }; //$NON-NLS-0$
+
+ var container = new orion.widgets.maker.PluginMakerContainer( containerParameters, dojo.byId( "selectionAgent" )); //$NON-NLS-0$
+
+ var description = orion.widgets.maker.PluginDescriptionSection({title:messages["Plugin Description"]});
+ container.addSection( description );
+
+ container.addCommand( messages['Create'], 'createPlugin' ); //$NON-NLS-1$
+
+ preferencesStatusService.setMessage("");
+ });
+ });
+}); \ No newline at end of file
diff --git a/bundles/org.eclipse.orion.client.ui/web/settings/orion-transparent.png b/bundles/org.eclipse.orion.client.ui/web/settings/orion-transparent.png
new file mode 100644
index 0000000..563010e
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/settings/orion-transparent.png
Binary files differ
diff --git a/bundles/org.eclipse.orion.client.ui/web/settings/scroll.css b/bundles/org.eclipse.orion.client.ui/web/settings/scroll.css
new file mode 100644
index 0000000..5a015bd
--- /dev/null
+++ b/bundles/org.eclipse.orion.client.ui/web/settings/scroll.css
@@ -0,0 +1,274 @@
+@import "../css/layout.css";
+@import "../css/ide.css";
+@import "../css/images.css";
+
+html,body {
+ height: 100%;
+}
+
+h1 {
+ position: relative;
+ margin-top: 18px
+}
+
+
+.scrollcontent {
+ position: relative;
+}
+
+.scrollmenubar{
+ width: 1010px;
+ height:40px;
+ border-top:solid 2px whitesmoke;
+ border-bottom: solid 2px whitesmoke ;
+ position: fixed;
+ z-index: 999;
+ clear: both;
+ overflow: hidden;
+ background: white;
+}
+
+.scrollmenu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ padding-left:20px;
+ position: absolute;
+ left: 0;
+}
+
+.scrollmenubar ul {
+ display: block;
+ text-decoration: none;
+}
+
+.scrollmenu li {
+ list-style:none;
+ float: left;
+ margin: 0 1em 0 0;
+ padding: .3em;
+ text-decoration: none;
+ background:white;
+}
+
+.scrollmenuitem{
+ color: #999;
+ padding: .4em;
+ margin-top:1px;
+ text-decoration: none;
+ font-family: sans-serif;
+ font-size: 12px;
+ border-bottom-left-radius: 4px 4px;
+ border-bottom-right-radius: 4px 4px;
+ border-top-left-radius: 4px 4px;
+ border-top-right-radius: 4px 4px;
+ line-height:2em;
+}
+
+
+.scrollmenuitem:hover{
+ background: #E3E3E3;
+ text-decoration: none;
+ color: #999;
+}
+
+.smiSelected{
+ border: 1px dotted #BFBFBF;
+
+ color: white;
+}
+
+.scrollmenuitem:visited{
+ background: #E3E3E3;
+ color: #999;
+}
+
+.anchor {
+ display: block;
+ height: 0;
+ border: none !important;
+ text-decoration: none !important;
+}
+
+.chapter {
+ position: relative;
+ clear: both;
+ overflow: hidden;
+}
+
+.sectionBlock{
+ border-bottom-left-radius: 20px 20px;
+ border-bottom-right-radius: 20px 20px;
+ border-top-left-radius: 20px 20px;
+ border-top-right-radius: 20px 20px;
+ padding:40px;
+ margin-top:50px;
+ margin-right:50px;
+ margin-left:50px;
+ position: relative;
+ clear: both;
+ overflow: hidden;
+ border: 1px dotted #BFBFBF;
+}
+
+.inner{
+ background: whitesmoke;
+ padding:10px;
+ border-bottom-left-radius: 20px 20px;
+ border-bottom-right-radius: 20px 20px;
+ border-top-left-radius: 20px 20px;
+ border-top-right-radius: 20px 20px;
+}
+
+.circle{
+ width:40px;
+ height:40px;
+ display:block;
+ border-radius:20px;
+ font-size:20px;
+ font-family:sans-serif;
+ font-weight:bolder;
+ color:#fff;
+ line-height:40px;
+ text-align:center;
+ background:#ffd401;
+ position:absolute;
+ margin-left:30px;
+ float:right;
+}
+
+.pluginTitle {
+ position:absolute;
+ float: right;
+ font-size: 1em;
+ font-weight: bold;
+ color: #666;
+ margin: 0;
+ background: white;
+ padding:10px;
+ margin-left:80px;
+}
+
+.scrollForm{
+ margin: 1em 0;
+ padding-top: 10px;
+ font-size:10px;
+}
+
+.scrollForm fieldset {
+ margin: 0;
+ padding-top: .5em;
+ border: none;
+}
+
+.scrollForm p {
+ clear: both;
+ margin: .5em 0;
+ overflow: hidden;
+}
+
+.scrollForm input {
+ font-size:10px;
+ font-family: sans-serif;
+ width: 500px;
+}
+
+.scrollForm textarea {
+ font-size:10px;
+ font-family: sans-serif;
+ width: 500px;
+ resize: none;
+}
+
+.scrollForm label {
+ float: left;
+ width: 100px;
+ display: block;
+ text-align: right;
+ margin-right: 10px;
+}
+
+.itemcount{
+ width:14px;
+ height:14px;
+ display:block;
+ border-radius:7px;
+ font-size:9px;
+ font-family:sans-serif;
+ font-weight:bolder;
+ color:#fff;
+ line-height:14px;
+ text-align:center;
+ background:#ffd401;
+ position:absolute;
+ float:right;
+ margin-top:-9px;
+ margin-left:-6px;
+}
+
+.steps{
+ margin:20px;
+ margin-top:0;
+ font-size: 14px;
+ font-family: sans-serif;
+ font-weight: bolder;
+ color: #999;
+ text-align:center;
+ vertical-align:middle;
+}
+
+.nextstep{
+ float: left;
+ width: 100px;
+ height: 50px;
+ margin:10px;
+ padding:20px;
+ border-radius:7px;
+ background: white;
+ border: 1px solid #BBBBBB;
+}
+
+.or{
+ float: left;
+ width: 20px;
+ height: 50px;
+ margin:10px;
+ padding:20px;
+}
+
+.downloadbutton {
+background-color: #91BD09;
+text-align: center;
+width: 150px;
+}
+
+.nextlink{
+ -moz-border-radius: 5px 5px 5px 5px;
+ -webkit-border-radius: 5px 5px 5px 5px;
+ border-radius: 5px 5px 5px 5px;
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
+ background: url("images/overlay-button.png") repeat-x scroll 0 0 #222;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.25);
+ color: white !important;
+ cursor: pointer;
+ font-weight: bold;
+ line-height: 1;
+ overflow: visible;
+ font-size: 17px;
+ padding: 8px 19px 9px;
+ position: relative;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
+ width: auto;
+ margin:10px;
+}
+
+.nextlink:hover {
+-moz-box-shadow: 0 1px 11px rgba(0, 0, 0, 0.45);
+-webkit-box-shadow: 0 1px 11px rgba(0, 0, 0, 0.45);
+box-shadow: 0 1px 11px rgba(0, 0, 0, 0.45);
+}
+
+