Selaa lähdekoodia

Add missing samples for msdax, postiats and sol

Alex Dima 8 vuotta sitten
vanhempi
commit
f37e26bee5

+ 2 - 2
package.json

@@ -23,8 +23,8 @@
     "http-server": "^0.9.0",
     "monaco-css": "1.3.2",
     "monaco-editor-core": "0.9.0",
-    "monaco-html": "1.3.0",
-    "monaco-json": "1.3.0",
+    "monaco-html": "1.3.1",
+    "monaco-json": "1.3.1",
     "monaco-languages": "0.8.0",
     "monaco-typescript": "2.2.0",
     "rimraf": "^2.5.2",

+ 5 - 7
test/playground.generated/creating-the-editor-hard-wrapping.html

@@ -42,13 +42,11 @@ var editor = monaco.editor.create(document.getElementById("container"), {
 	value: jsCode,
 	language: "javascript",
 
-	// If `wrappingColumn` is -1, then no wrapping occurs and
-	// long lines are rendered on one line. However, this might
-	// mean that not all code is rendered (... may be used).
-	// If `wrappingColumn` is 0, then viewport width wrapping is set
-	// If `wrappingColumn` is > 0, then the lines will wrap at its value
-	// Defaults to 300
-	wrappingColumn: 40,
+	wordWrap: 'wordWrapColumn',
+	wordWrapColumn: 40,
+
+	// Set this to false to not auto word wrap minified files
+	wordWrapMinified: true,
 
 	// try "same", "indent" or "none"
 	wrappingIndent: "indent"

+ 147 - 33
test/playground.generated/customizing-the-appearence-exposed-colors.html

@@ -10,38 +10,6 @@
 <style>
 /*----------------------------------------SAMPLE CSS START*/
 
-.monaco-editor, .monaco-editor-background {
-	background: #EDF9FA;
-}
-
-/* Cursor */
-.monaco-editor .cursor {
-	background: darkred !important;
-}
-
-/* Current line */
-.monaco-editor .current-line {
-	background: rgba(0, 0, 255, 0.1);
-}
-
-/* Line Numbers */
-.monaco-editor .line-numbers {
-	background-color: #EDF9FA;
-	color: green;
-}
-
-/* Line Decorations */
-.monaco-editor .lines-decorations {
-	background-color: #EDF9FA;
-}
-
-/* Selection */
-.monaco-editor .view-overlays.focused .selected-text {
-	background: rgba(128, 0, 0, 0.2) !important;
-}
-.monaco-editor .view-overlays .selected-text {
-	background: rgba(128, 0, 0, 0.1) !important;
-}
 
 
 /*----------------------------------------SAMPLE CSS END*/
@@ -68,7 +36,24 @@ THIS IS A GENERATED FILE VIA gulp generate-test-samples
 loadEditor(function() {
 /*----------------------------------------SAMPLE JS START*/
 
-// The editor exposes a set of CSS classes that can be overwritten.
+// The editor colors can be customized through CSS or through JS
+
+monaco.editor.defineTheme('myTheme', {
+    base: 'vs',
+    inherit: true,
+    rules: [{ background: 'EDF9FA' }],
+    colors: {
+        'editor.foreground': '#000000',
+        'editor.background': '#EDF9FA',
+        'editorCursor.foreground': '#8B0000',
+        'editor.lineHighlightBackground': '#0000FF20',
+        'editorLineNumber.foreground': '#008800',
+        'editor.selectionBackground': '#88000030',
+        'editor.inactiveSelectionBackground': '#88000015'
+    }
+});
+monaco.editor.setTheme('myTheme');
+
 monaco.editor.create(document.getElementById("container"), {
 	value: "My to-do list:\n* buy milk\n* buy coffee\n* write awesome code",
 	language: "text/plain",
@@ -76,6 +61,135 @@ monaco.editor.create(document.getElementById("container"), {
 	fontSize: 20
 });
 
+// A list of color names:
+'foreground' // Overall foreground color. This color is only used if not overridden by a component.
+'errorForeground' // Overall foreground color for error messages. This color is only used if not overridden by a component.
+'descriptionForeground' // Foreground color for description text providing additional information, for example for a label.
+'focusBorder' // Overall border color for focused elements. This color is only used if not overridden by a component.
+'contrastBorder' // An extra border around elements to separate them from others for greater contrast.
+'contrastActiveBorder' // An extra border around active elements to separate them from others for greater contrast.
+'selection.background' // The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.
+'textSeparator.foreground' // Color for text separators.
+'textLink.foreground' // Foreground color for links in text.
+'textLink.activeForeground' // Foreground color for active links in text.
+'textPreformat.foreground' // Foreground color for preformatted text segments.
+'textBlockQuote.background' // Background color for block quotes in text.
+'textBlockQuote.border' // Border color for block quotes in text.
+'textCodeBlock.background' // Background color for code blocks in text.
+'widget.shadow' // Shadow color of widgets such as find/replace inside the editor.
+'input.background' // Input box background.
+'input.foreground' // Input box foreground.
+'input.border' // Input box border.
+'inputOption.activeBorder' // Border color of activated options in input fields.
+'input.placeholderForeground' // Input box foreground color for placeholder text.
+'inputValidation.infoBackground' // Input validation background color for information severity.
+'inputValidation.infoBorder' // Input validation border color for information severity.
+'inputValidation.warningBackground' // Input validation background color for information warning.
+'inputValidation.warningBorder' // Input validation border color for warning severity.
+'inputValidation.errorBackground' // Input validation background color for error severity.
+'inputValidation.errorBorder' // Input validation border color for error severity.
+'dropdown.background' // Dropdown background.
+'dropdown.foreground' // Dropdown foreground.
+'dropdown.border' // Dropdown border.
+'list.focusBackground' // List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.
+'list.focusForeground' // List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.
+'list.activeSelectionBackground' // List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.
+'list.activeSelectionForeground' // List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.
+'list.inactiveSelectionBackground' // List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.
+'list.inactiveSelectionForeground' // List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.
+'list.hoverBackground' // List/Tree background when hovering over items using the mouse.
+'list.hoverForeground' // List/Tree foreground when hovering over items using the mouse.
+'list.dropBackground' // List/Tree drag and drop background when moving items around using the mouse.
+'list.highlightForeground' // List/Tree foreground color of the match highlights when searching inside the list/tree.
+'pickerGroup.foreground' // Quick picker color for grouping labels.
+'pickerGroup.border' // Quick picker color for grouping borders.
+'button.foreground' // Button foreground color.
+'button.background' // Button background color.
+'button.hoverBackground' // Button background color when hovering.
+'badge.background' // Badge background color. Badges are small information labels, e.g. for search results count.
+'badge.foreground' // Badge foreground color. Badges are small information labels, e.g. for search results count.
+'scrollbar.shadow' // Scrollbar shadow to indicate that the view is scrolled.
+'scrollbarSlider.background' // Slider background color.
+'scrollbarSlider.hoverBackground' // Slider background color when hovering.
+'scrollbarSlider.activeBackground' // Slider background color when active.
+'progressBar.background' // Background color of the progress bar that can show for long running operations.
+'editor.background' // Editor background color.
+'editor.foreground' // Editor default foreground color.
+'editorWidget.background' // Background color of editor widgets, such as find/replace.
+'editorWidget.border' // Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.
+'editor.selectionBackground' // Color of the editor selection.
+'editor.selectionForeground' // Color of the selected text for high contrast.
+'editor.inactiveSelectionBackground' // Color of the selection in an inactive editor.
+'editor.selectionHighlightBackground' // Color for regions with the same content as the selection.
+'editor.findMatchBackground' // Color of the current search match.
+'editor.findMatchHighlightBackground' // Color of the other search matches.
+'editor.findRangeHighlightBackground' // Color the range limiting the search.
+'editor.hoverHighlightBackground' // Highlight below the word for which a hover is shown.
+'editorHoverWidget.background' // Background color of the editor hover.
+'editorHoverWidget.border' // Border color of the editor hover.
+'editorLink.activeForeground' // Color of active links.
+'diffEditor.insertedTextBackground' // Background color for text that got inserted.
+'diffEditor.removedTextBackground' // Background color for text that got removed.
+'diffEditor.insertedTextBorder' // Outline color for the text that got inserted.
+'diffEditor.removedTextBorder' // Outline color for text that got removed.
+'merge.currentHeaderBackground' // Current header background in inline merge-conflicts.
+'merge.currentContentBackground' // Current content background in inline merge-conflicts.
+'merge.incomingHeaderBackground' // Incoming header background in inline merge-conflicts.
+'merge.incomingContentBackground' // Incoming content background in inline merge-conflicts.
+'merge.commonHeaderBackground' // Common ancestor header background in inline merge-conflicts.
+'merge.commonContentBackground' // Common ancester content background in inline merge-conflicts.
+'merge.border' // Border color on headers and the splitter in inline merge-conflicts.
+'editorOverviewRuler.currentContentForeground' // Current overview ruler foreground for inline merge-conflicts.
+'editorOverviewRuler.incomingContentForeground' // Incoming overview ruler foreground for inline merge-conflicts.
+'editorOverviewRuler.commonContentForeground' // Common ancestor overview ruler foreground for inline merge-conflicts.
+'editor.lineHighlightBackground' // Background color for the highlight of line at the cursor position.
+'editor.lineHighlightBorder' // Background color for the border around the line at the cursor position.
+'editor.rangeHighlightBackground' // Background color of highlighted ranges, like by quick open and find features.
+'editorCursor.foreground' // Color of the editor cursor.
+'editorWhitespace.foreground' // Color of whitespace characters in the editor.
+'editorIndentGuide.background' // Color of the editor indentation guides.
+'editorLineNumber.foreground' // Color of editor line numbers.
+'editorRuler.foreground' // Color of the editor rulers.
+'editorCodeLens.foreground' // Foreground color of editor code lenses
+'editorBracketMatch.background' // Background color behind matching brackets
+'editorBracketMatch.border' // Color for matching brackets boxes
+'editorOverviewRuler.border' // Color of the overview ruler border.
+'editorGutter.background' // Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.
+'editorError.foreground' // Foreground color of error squigglies in the editor.
+'editorError.border' // Border color of error squigglies in the editor.
+'editorWarning.foreground' // Foreground color of warning squigglies in the editor.
+'editorWarning.border' // Border color of warning squigglies in the editor.
+'editorMarkerNavigationError.background' // Editor marker navigation widget error color.
+'editorMarkerNavigationWarning.background' // Editor marker navigation widget warning color.
+'editorMarkerNavigation.background' // Editor marker navigation widget background.
+'editorSuggestWidget.background' // Background color of the suggest widget.
+'editorSuggestWidget.border' // Border color of the suggest widget.
+'editorSuggestWidget.foreground' // Foreground color of the suggest widget.
+'editorSuggestWidget.selectedBackground' // Background color of the selected entry in the suggest widget.
+'editorSuggestWidget.highlightForeground' // Color of the match highlights in the suggest widget.
+'editor.wordHighlightBackground' // Background color of a symbol during read-access, like reading a variable.
+'editor.wordHighlightStrongBackground' // Background color of a symbol during write-access, like writing to a variable.
+'peekViewTitle.background' // Background color of the peek view title area.
+'peekViewTitleLabel.foreground' // Color of the peek view title.
+'peekViewTitleDescription.foreground' // Color of the peek view title info.
+'peekView.border' // Color of the peek view borders and arrow.
+'peekViewResult.background' // Background color of the peek view result list.
+'peekViewResult.lineForeground' // Foreground color for line nodes in the peek view result list.
+'peekViewResult.fileForeground' // Foreground color for file nodes in the peek view result list.
+'peekViewResult.selectionBackground' // Background color of the selected entry in the peek view result list.
+'peekViewResult.selectionForeground' // Foreground color of the selected entry in the peek view result list.
+'peekViewEditor.background' // Background color of the peek view editor.
+'peekViewEditorGutter.background' // Background color of the gutter in the peek view editor.
+'peekViewResult.matchHighlightBackground' // Match highlight color in the peek view result list.
+'peekViewEditor.matchHighlightBackground' // Match highlight color in the peek view editor.
+
+/*
+var colors = require('vs/platform/registry/common/platform').Registry.data['base.contributions.colors'].colorSchema.properties
+Object.keys(colors).forEach(function(key) {
+    var val = colors[key];
+    console.log( '//' + val.description + '\n' + key);
+})
+*/
 
 /*----------------------------------------SAMPLE CSS END*/
 });

+ 1 - 1
test/playground.generated/index.html

@@ -19,7 +19,7 @@ THIS IS A GENERATED FILE VIA gulp generate-test-samples<br/><br/>
 <a class="loading-opts" href="playground.generated/interacting-with-the-editor-customizing-the-line-numbers.html">Interacting with the editor &gt; Customizing the line numbers</a><br/>
 <a class="loading-opts" href="playground.generated/interacting-with-the-editor-listening-to-mouse-events.html">Interacting with the editor &gt; Listening to mouse events</a><br/>
 <a class="loading-opts" href="playground.generated/interacting-with-the-editor-listening-to-key-events.html">Interacting with the editor &gt; Listening to key events</a><br/>
-<a class="loading-opts" href="playground.generated/customizing-the-appearence-exposed-colors.html">Customizing the appearence &gt; Exposed CSS classes</a><br/>
+<a class="loading-opts" href="playground.generated/customizing-the-appearence-exposed-colors.html">Customizing the appearence &gt; Exposed colors</a><br/>
 <a class="loading-opts" href="playground.generated/customizing-the-appearence-scrollbars.html">Customizing the appearence &gt; Scrollbars</a><br/>
 <a class="loading-opts" href="playground.generated/customizing-the-appearence-tokens-and-colors.html">Customizing the appearence &gt; Tokens and colors</a><br/>
 <a class="loading-opts" href="playground.generated/creating-the-diffeditor-hello-diff-world.html">Creating the DiffEditor &gt; Hello diff world!</a><br/>

+ 4 - 3
test/playground.generated/interacting-with-the-editor-adding-an-action-to-an-editor-instance.html

@@ -51,9 +51,6 @@ var editor = monaco.editor.create(document.getElementById("container"), {
 });
 
 // Explanation:
-// Try right clicking on an identifier or keyword => the action will be enabled (due to `tokensAtPosition`)
-// Try right clicking on a string => the action will be disabled (due to `tokensAtPosition`)
-// Try right clicking on whitespace => the action will be disabled (due to `wordAtPosition`)
 // Press F1 (Alt-F1 in IE) => the action will appear and run if it is enabled
 // Press Ctrl-F10 => the action will run if it is enabled
 
@@ -67,6 +64,10 @@ editor.addAction({
 	// An optional array of keybindings for the action.
 	keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.F10],
 
+	// A precondition for this action.
+	precondition: null,
+
+	// A rule to evaluate on top of the precondition in order to dispatch the keybindings.
 	keybindingContext: null,
 
 	contextMenuGroupId: 'navigation',

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
test/samples-all.generated.js


+ 1 - 0
test/samples/sample.msdax.txt

@@ -0,0 +1 @@
+ = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSQUARTER(Calendar[DateKey]))

+ 64 - 0
test/samples/sample.postiats.txt

@@ -0,0 +1,64 @@
+// http://www.ats-lang.org/
+(* Say Hello! once *)
+val () = print"Hello!\n"
+//
+(* Say Hello! 3 times *)
+val () = 3*delay(print"Hello!")
+val () = print_newline((*void*))
+//
+
+//
+(* Build a list of 3 *)
+val xs = $list{int}(0, 1, 2)
+//
+val x0 = xs[0] // legal
+val x1 = xs[1] // legal
+val x2 = xs[2] // legal
+val x3 = xs[3] // illegal
+//
+
+//
+extern
+fun{} f0 (): int
+extern
+fun{} f1 (int): int
+extern
+fun{} repeat_f0f1 (int): int
+//
+implement
+{}(*tmp*)
+repeat_f0f1(n) =
+  if n = 0
+    then f0()
+    else f1(repeat_f0f1(n-1))
+  // end of [if]
+//
+fun
+times (
+  m:int, n:int
+) : int = // m*n
+  repeat_f0f1 (m) where
+{
+  implement f0<> () = 0
+  implement f1<> (x) = x + n
+}
+//
+fun
+power (
+  m:int, n:int
+) : int = // m^n
+  repeat_f0f1 (n) where
+{
+  implement f0<> () = 1
+  implement f1<> (x) = m * x
+}
+//
+val () =
+println! ("5*5 = ", times(5,5))
+val () =
+println! ("5^2 = ", power(5,2))
+val () =
+println! ("2^10 = ", power(2,10))
+val () =
+println! ("3^10 = ", power(3,10))
+//

+ 139 - 0
test/samples/sample.sol.txt

@@ -0,0 +1,139 @@
+pragma solidity ^0.4.11;
+
+/// @title Voting with delegation.
+contract Ballot {
+    // This declares a new complex type which will
+    // be used for variables later.
+    // It will represent a single voter.
+    struct Voter {
+        uint weight; // weight is accumulated by delegation
+        bool voted;  // if true, that person already voted
+        address delegate; // person delegated to
+        uint vote;   // index of the voted proposal
+    }
+
+    // This is a type for a single proposal.
+    struct Proposal {
+        bytes32 name;   // short name (up to 32 bytes)
+        uint voteCount; // number of accumulated votes
+    }
+
+    address public chairperson;
+
+    // This declares a state variable that
+    // stores a `Voter` struct for each possible address.
+    mapping(address => Voter) public voters;
+
+    // A dynamically-sized array of `Proposal` structs.
+    Proposal[] public proposals;
+
+    /// Create a new ballot to choose one of `proposalNames`.
+    function Ballot(bytes32[] proposalNames) {
+        chairperson = msg.sender;
+        voters[chairperson].weight = 1;
+
+        // For each of the provided proposal names,
+        // create a new proposal object and add it
+        // to the end of the array.
+        for (uint i = 0; i < proposalNames.length; i++) {
+            // `Proposal({...})` creates a temporary
+            // Proposal object and `proposals.push(...)`
+            // appends it to the end of `proposals`.
+            proposals.push(Proposal({
+                name: proposalNames[i],
+                voteCount: 0
+            }));
+        }
+    }
+
+    // Give `voter` the right to vote on this ballot.
+    // May only be called by `chairperson`.
+    function giveRightToVote(address voter) {
+        // If the argument of `require` evaluates to `false`,
+        // it terminates and reverts all changes to
+        // the state and to Ether balances. It is often
+        // a good idea to use this if functions are
+        // called incorrectly. But watch out, this
+        // will currently also consume all provided gas
+        // (this is planned to change in the future).
+        require((msg.sender == chairperson) && !voters[voter].voted && (voters[voter].weight == 0));
+        voters[voter].weight = 1;
+    }
+
+    /// Delegate your vote to the voter `to`.
+    function delegate(address to) {
+        // assigns reference
+        Voter sender = voters[msg.sender];
+        require(!sender.voted);
+
+        // Self-delegation is not allowed.
+        require(to != msg.sender);
+
+        // Forward the delegation as long as
+        // `to` also delegated.
+        // In general, such loops are very dangerous,
+        // because if they run too long, they might
+        // need more gas than is available in a block.
+        // In this case, the delegation will not be executed,
+        // but in other situations, such loops might
+        // cause a contract to get "stuck" completely.
+        while (voters[to].delegate != address(0)) {
+            to = voters[to].delegate;
+
+            // We found a loop in the delegation, not allowed.
+            require(to != msg.sender);
+        }
+
+        // Since `sender` is a reference, this
+        // modifies `voters[msg.sender].voted`
+        sender.voted = true;
+        sender.delegate = to;
+        Voter delegate = voters[to];
+        if (delegate.voted) {
+            // If the delegate already voted,
+            // directly add to the number of votes
+            proposals[delegate.vote].voteCount += sender.weight;
+        } else {
+            // If the delegate did not vote yet,
+            // add to her weight.
+            delegate.weight += sender.weight;
+        }
+    }
+
+    /// Give your vote (including votes delegated to you)
+    /// to proposal `proposals[proposal].name`.
+    function vote(uint proposal) {
+        Voter sender = voters[msg.sender];
+        require(!sender.voted);
+        sender.voted = true;
+        sender.vote = proposal;
+
+        // If `proposal` is out of the range of the array,
+        // this will throw automatically and revert all
+        // changes.
+        proposals[proposal].voteCount += sender.weight;
+    }
+
+    /// @dev Computes the winning proposal taking all
+    /// previous votes into account.
+    function winningProposal() constant
+            returns (uint winningProposal)
+    {
+        uint winningVoteCount = 0;
+        for (uint p = 0; p < proposals.length; p++) {
+            if (proposals[p].voteCount > winningVoteCount) {
+                winningVoteCount = proposals[p].voteCount;
+                winningProposal = p;
+            }
+        }
+    }
+
+    // Calls winningProposal() function to get the index
+    // of the winner contained in the proposals array and then
+    // returns the name of the winner
+    function winnerName() constant
+            returns (bytes32 winnerName)
+    {
+        winnerName = proposals[winningProposal()].name;
+    }
+}

+ 1 - 0
website/index/samples/sample.msdax.txt

@@ -0,0 +1 @@
+ = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSQUARTER(Calendar[DateKey]))

+ 64 - 0
website/index/samples/sample.postiats.txt

@@ -0,0 +1,64 @@
+// http://www.ats-lang.org/
+(* Say Hello! once *)
+val () = print"Hello!\n"
+//
+(* Say Hello! 3 times *)
+val () = 3*delay(print"Hello!")
+val () = print_newline((*void*))
+//
+
+//
+(* Build a list of 3 *)
+val xs = $list{int}(0, 1, 2)
+//
+val x0 = xs[0] // legal
+val x1 = xs[1] // legal
+val x2 = xs[2] // legal
+val x3 = xs[3] // illegal
+//
+
+//
+extern
+fun{} f0 (): int
+extern
+fun{} f1 (int): int
+extern
+fun{} repeat_f0f1 (int): int
+//
+implement
+{}(*tmp*)
+repeat_f0f1(n) =
+  if n = 0
+    then f0()
+    else f1(repeat_f0f1(n-1))
+  // end of [if]
+//
+fun
+times (
+  m:int, n:int
+) : int = // m*n
+  repeat_f0f1 (m) where
+{
+  implement f0<> () = 0
+  implement f1<> (x) = x + n
+}
+//
+fun
+power (
+  m:int, n:int
+) : int = // m^n
+  repeat_f0f1 (n) where
+{
+  implement f0<> () = 1
+  implement f1<> (x) = m * x
+}
+//
+val () =
+println! ("5*5 = ", times(5,5))
+val () =
+println! ("5^2 = ", power(5,2))
+val () =
+println! ("2^10 = ", power(2,10))
+val () =
+println! ("3^10 = ", power(3,10))
+//

+ 139 - 0
website/index/samples/sample.sol.txt

@@ -0,0 +1,139 @@
+pragma solidity ^0.4.11;
+
+/// @title Voting with delegation.
+contract Ballot {
+    // This declares a new complex type which will
+    // be used for variables later.
+    // It will represent a single voter.
+    struct Voter {
+        uint weight; // weight is accumulated by delegation
+        bool voted;  // if true, that person already voted
+        address delegate; // person delegated to
+        uint vote;   // index of the voted proposal
+    }
+
+    // This is a type for a single proposal.
+    struct Proposal {
+        bytes32 name;   // short name (up to 32 bytes)
+        uint voteCount; // number of accumulated votes
+    }
+
+    address public chairperson;
+
+    // This declares a state variable that
+    // stores a `Voter` struct for each possible address.
+    mapping(address => Voter) public voters;
+
+    // A dynamically-sized array of `Proposal` structs.
+    Proposal[] public proposals;
+
+    /// Create a new ballot to choose one of `proposalNames`.
+    function Ballot(bytes32[] proposalNames) {
+        chairperson = msg.sender;
+        voters[chairperson].weight = 1;
+
+        // For each of the provided proposal names,
+        // create a new proposal object and add it
+        // to the end of the array.
+        for (uint i = 0; i < proposalNames.length; i++) {
+            // `Proposal({...})` creates a temporary
+            // Proposal object and `proposals.push(...)`
+            // appends it to the end of `proposals`.
+            proposals.push(Proposal({
+                name: proposalNames[i],
+                voteCount: 0
+            }));
+        }
+    }
+
+    // Give `voter` the right to vote on this ballot.
+    // May only be called by `chairperson`.
+    function giveRightToVote(address voter) {
+        // If the argument of `require` evaluates to `false`,
+        // it terminates and reverts all changes to
+        // the state and to Ether balances. It is often
+        // a good idea to use this if functions are
+        // called incorrectly. But watch out, this
+        // will currently also consume all provided gas
+        // (this is planned to change in the future).
+        require((msg.sender == chairperson) && !voters[voter].voted && (voters[voter].weight == 0));
+        voters[voter].weight = 1;
+    }
+
+    /// Delegate your vote to the voter `to`.
+    function delegate(address to) {
+        // assigns reference
+        Voter sender = voters[msg.sender];
+        require(!sender.voted);
+
+        // Self-delegation is not allowed.
+        require(to != msg.sender);
+
+        // Forward the delegation as long as
+        // `to` also delegated.
+        // In general, such loops are very dangerous,
+        // because if they run too long, they might
+        // need more gas than is available in a block.
+        // In this case, the delegation will not be executed,
+        // but in other situations, such loops might
+        // cause a contract to get "stuck" completely.
+        while (voters[to].delegate != address(0)) {
+            to = voters[to].delegate;
+
+            // We found a loop in the delegation, not allowed.
+            require(to != msg.sender);
+        }
+
+        // Since `sender` is a reference, this
+        // modifies `voters[msg.sender].voted`
+        sender.voted = true;
+        sender.delegate = to;
+        Voter delegate = voters[to];
+        if (delegate.voted) {
+            // If the delegate already voted,
+            // directly add to the number of votes
+            proposals[delegate.vote].voteCount += sender.weight;
+        } else {
+            // If the delegate did not vote yet,
+            // add to her weight.
+            delegate.weight += sender.weight;
+        }
+    }
+
+    /// Give your vote (including votes delegated to you)
+    /// to proposal `proposals[proposal].name`.
+    function vote(uint proposal) {
+        Voter sender = voters[msg.sender];
+        require(!sender.voted);
+        sender.voted = true;
+        sender.vote = proposal;
+
+        // If `proposal` is out of the range of the array,
+        // this will throw automatically and revert all
+        // changes.
+        proposals[proposal].voteCount += sender.weight;
+    }
+
+    /// @dev Computes the winning proposal taking all
+    /// previous votes into account.
+    function winningProposal() constant
+            returns (uint winningProposal)
+    {
+        uint winningVoteCount = 0;
+        for (uint p = 0; p < proposals.length; p++) {
+            if (proposals[p].voteCount > winningVoteCount) {
+                winningVoteCount = proposals[p].voteCount;
+                winningProposal = p;
+            }
+        }
+    }
+
+    // Calls winningProposal() function to get the index
+    // of the winner contained in the proposals array and then
+    // returns the name of the winner
+    function winnerName() constant
+            returns (bytes32 winnerName)
+    {
+        winnerName = proposals[winningProposal()].name;
+    }
+}

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä